rename dir scripts -> examples

This commit is contained in:
Joeri Exelmans 2025-04-18 09:14:09 +02:00
parent bc9dce4b9c
commit 28f60e77be
7 changed files with 0 additions and 0 deletions

60
examples/int_or_bool.js Normal file
View file

@ -0,0 +1,60 @@
import { assign, makeGeneric, unify } from "../generics/generics.js";
import { Bool, Int } from "../primitives/types.js";
import { constructorLeft, constructorRight, match } from "../structures/sum.js";
import { fnType, sumType } from "../structures/types.js";
import { pretty } from '../util/pretty.js';
const IntOrBool = sumType(Int)(Bool);
// console.log(int5);
console.log(pretty(unify(
makeGeneric(() => IntOrBool),
makeGeneric(a => sumType(Int)(a)),
)));
const cipFunction = (x) => {
return match(x)({
left: x_as_int => (x_as_int === 5),
right: x_as_bool => false,
});
}
const cipFunctionType = fnType
(IntOrBool) // in
(Bool);
// console.log(cipFunctionType);
// console.log(IntOrBool);
console.log(assign(
makeGeneric(() => cipFunctionType),
makeGeneric(() => IntOrBool),
));
console.log("calling constructorLeft with Int:");
const typeAtCallSite = assign(
makeGeneric((a, b) =>
fnType
(a)
(sumType(a)(b))
),
makeGeneric(() => Int));
console.log(pretty(typeAtCallSite));
console.log("calling cipFunction:");
console.log(pretty(assign(
makeGeneric(() => cipFunctionType),
typeAtCallSite,
)));
console.log("valid function calls:");
console.log(cipFunction(constructorLeft(5)));
console.log(cipFunction(constructorLeft(7)));
console.log(cipFunction(constructorRight(true)));
console.log("invalid function calls:");
console.log(cipFunction(5));
console.log(cipFunction(constructorLeft("abc")));