don't re-compute values on first render (unnecessary, values are part of state)
This commit is contained in:
parent
174bab79e4
commit
2d0deca127
14 changed files with 274 additions and 115 deletions
|
|
@ -1,4 +1,4 @@
|
|||
import {getType, getInst, getSymbol, Double, Int, symbolFunction, symbolProduct, symbolSum, symbolDict, symbolSet, symbolList, eqType, match, getLeft, getRight, dict, Bool} from "dope2";
|
||||
import {getType, getInst, getSymbol, Double, Int, symbolFunction, symbolProduct, symbolSum, symbolDict, symbolSet, symbolList, eqType, match, getLeft, getRight, dict, Bool, set} from "dope2";
|
||||
|
||||
import "./Value.css";
|
||||
|
||||
|
|
@ -19,21 +19,14 @@ export function Value({dynamic}) {
|
|||
switch (symbol) {
|
||||
case symbolFunction:
|
||||
return <ValueFunction/>;
|
||||
// return <BinaryType type={type} cssClass="functionType" infix="→" prefix="" suffix=""/>;
|
||||
// case symbolProduct:
|
||||
// return <BinaryType type={type} cssClass="productType" infix="⨯" prefix="" suffix=""/>;
|
||||
case symbolSum:
|
||||
return <ValueSum val={inst} leftType={type.params[0](type)} rightType={type.params[1](type)}/>;
|
||||
|
||||
case symbolProduct:
|
||||
return <ValueProduct val={inst} leftType={type.params[0](type)} rightType={type.params[1](type)}/>;
|
||||
|
||||
case symbolDict:
|
||||
return <ValueDict val={inst} keyType={type.params[0](type)} valueType={type.params[1](type)}/>;
|
||||
|
||||
// return <BinaryType type={type} cssClass="dictType" infix="⇒" prefix="{" suffix="}"/>;
|
||||
// case symbolSet:
|
||||
// return <UnaryType type={type} cssClass="setType" prefix="{" suffix="}" />;
|
||||
case symbolSet:
|
||||
return <ValueSet val={inst} elemType={type.params[0](type)} />;
|
||||
case symbolList:
|
||||
return <ValueList val={inst} elemType={type.params[0](type)} />;
|
||||
|
||||
|
|
@ -60,6 +53,15 @@ function ValueBool({val}) {
|
|||
function ValueList({val, elemType}) {
|
||||
return <span className="listType">[{val.map((v, i) => <Value key={i} dynamic={{i:v, t:elemType}}/>)}]</span>;
|
||||
}
|
||||
function ValueSet({val, elemType}) {
|
||||
return <span className="setType">{'{'}{set.fold(acc => elem => acc.concat([elem]))([])(val).map((v, i) => <Value key={i} dynamic={{i:v, t:elemType}}/>)}{'}'}</span>;
|
||||
}
|
||||
function ValueDict({val, keyType, valueType}) {
|
||||
return <span className="dictType">{'{'}{set.fold(acc => key => value => acc.concat([[key,value]]))([])(val).map(([key, value], i) => <span key={i}>
|
||||
<Value key={i} dynamic={{i:key, t:keyType}}/>
|
||||
<Value key={i} dynamic={{i:value, t:valueType}}/>
|
||||
</span>)}{'}'}</span>;
|
||||
}
|
||||
function ValueSum({val, leftType, rightType}) {
|
||||
return match(val)
|
||||
(l => <span className="sumType">L <Value dynamic={{i:l, t:leftType}}/></span>)
|
||||
|
|
@ -68,23 +70,23 @@ function ValueSum({val, leftType, rightType}) {
|
|||
function ValueProduct({val, leftType, rightType}) {
|
||||
return <span className="productType">(<Value dynamic={{i:getLeft(val), t:leftType}}/>, <Value dynamic={{i:getRight(val), t:rightType}} />)</span>;
|
||||
}
|
||||
function ValueDict({val, keyType, valueType}) {
|
||||
let i=0;
|
||||
return <span className="dictType">{'{'}<>{
|
||||
dict.fold
|
||||
(acc => key => value => {
|
||||
console.log({acc, key, value});
|
||||
return acc.concat([<>
|
||||
<Value key={i++} dynamic={{i: key, t: keyType}}/>
|
||||
⇒
|
||||
<Value key={i++} dynamic={{i: value, t: valueType}}/>
|
||||
</>]);
|
||||
})
|
||||
([])
|
||||
(val)
|
||||
.map(result => {
|
||||
console.log(result);
|
||||
return result;
|
||||
})
|
||||
}</>{'}'}</span>;
|
||||
}
|
||||
// function ValueDict({val, keyType, valueType}) {
|
||||
// let i=0;
|
||||
// return <span className="dictType">{'{'}<>{
|
||||
// dict.fold
|
||||
// (acc => key => value => {
|
||||
// console.log({acc, key, value});
|
||||
// return acc.concat([<>
|
||||
// <Value key={i++} dynamic={{i: key, t: keyType}}/>
|
||||
// ⇒
|
||||
// <Value key={i++} dynamic={{i: value, t: valueType}}/>
|
||||
// </>]);
|
||||
// })
|
||||
// ([])
|
||||
// (val)
|
||||
// .map(result => {
|
||||
// console.log(result);
|
||||
// return result;
|
||||
// })
|
||||
// }</>{'}'}</span>;
|
||||
// }
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue