export things
This commit is contained in:
parent
01dabaa219
commit
2129a7fdaf
4 changed files with 17 additions and 40 deletions
|
|
@ -1,35 +0,0 @@
|
|||
// Total ordering of slots and values (versioning library).
|
||||
// Problem: A Value produced by a transformation can depend on other Values of any type!
|
||||
// So, we cannot statically know the entire type -> resort to dynamic typing for these?
|
||||
|
||||
export const compareSlots = compareElems => slotA => slotB => {
|
||||
if (slotA.depth < slotB.depth) {
|
||||
return -1;
|
||||
}
|
||||
if (slotB.depth < slotA.depth) {
|
||||
return 1;
|
||||
}
|
||||
return compareValues(compareElems)(slotA.value)(slotB.value);
|
||||
};
|
||||
|
||||
export const compareValues = compareElems => valA => valB => {
|
||||
if (valA.kind < valB.kind) {
|
||||
return -1;
|
||||
}
|
||||
if (valB.kind < valA.kind) {
|
||||
return 1;
|
||||
}
|
||||
if (valA.kind === "literal") {
|
||||
return compareElems(valA.out)(valB.out);
|
||||
}
|
||||
if (valA.kind === "read") {
|
||||
return compareSlots(compareElems)(valA.slot)(valB.slot);
|
||||
}
|
||||
if (valA.kind === "transformation") {
|
||||
const cmpIn = compareValues(compareElems)(valA.in)(valB.in);
|
||||
if (cmpIn !== 0) {
|
||||
return cmpIn;
|
||||
}
|
||||
return compareValues(compareElems)(valA.fn)(valB.fn);
|
||||
}
|
||||
};
|
||||
|
|
@ -7,15 +7,20 @@ import { makeModuleEnum } from "../../structures/enum.types.js";
|
|||
import { makeModuleStruct } from "../../structures/struct.types.js";
|
||||
import { fnType } from "../../structures/type_constructors.types.js";
|
||||
|
||||
export const symbolSlot = "Slot__318d1c1a9336c141336c461c6a3207b0";
|
||||
export const symbolValue = "Value__23fc00a2db1374bd3dc1a0ad2d8517ab";
|
||||
export const symbolTransformation = "Transformation__9eac70d7020c7c45d5a16f3f14b13083";
|
||||
export const symbolWrite = "Write__abaef8ddb5c167b5d2cedac111fcefd3";
|
||||
|
||||
// Value and Slot each take 1 type parameter
|
||||
export const Slot = makeTypeConstructor("Slot__318d1c1a9336c141336c461c6a3207b0")(1);
|
||||
export const Value = makeTypeConstructor("Value__23fc00a2db1374bd3dc1a0ad2d8517ab")(1);
|
||||
export const Slot = makeTypeConstructor(symbolSlot)(1);
|
||||
export const Value = makeTypeConstructor(symbolValue)(1);
|
||||
|
||||
// Transformation takes 2 type parameters
|
||||
export const Transformation = makeTypeConstructor("Transformation__9eac70d7020c7c45d5a16f3f14b13083")(2);
|
||||
export const Transformation = makeTypeConstructor(symbolTransformation)(2);
|
||||
|
||||
// A Write-operation writes a value to a slot. The inner type of the Value and Slot must match.
|
||||
export const Write = makeTypeConstructor("Write__abaef8ddb5c167b5d2cedac111fcefd3")(1);
|
||||
export const Write = makeTypeConstructor(symbolWrite)(1);
|
||||
|
||||
// Enum: Value
|
||||
const [
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue