dope2/versioning/types.js
2025-04-20 21:14:40 +02:00

27 lines
No EOL
981 B
JavaScript

import { Dynamic } from "../primitives/dynamic.js";
import { Int } from "../primitives/types.js";
import { enumType } from "../structures/enum.js";
import { newProduct } from "../structures/product.js";
import { structType } from "../structures/struct.js";
import { prodType } from "../structures/types.js";
import { prettyT } from "../util/pretty.js";
const Slot = structType([
newProduct("value")(() => Value),
newProduct("depth")(() => Int),
newProduct("overwrites")(() => Slot),
]);
// A Value is either:
// - a literal, without any dependencies.
// - read from a slot. the Value then has a read-dependency on that slot.
// - a transformation of another Value, by a function. the function is also a Value.
const variants = [
newProduct("literal", () => Dynamic),
newProduct("read", () => Slot),
newProduct("transformation", () => prodType(Value, Dynamic)),
];
const Value = enumType(variants);
// console.log(prettyT(Slot));
// console.log(prettyT(Value));