rename dir scripts -> examples
This commit is contained in:
parent
bc9dce4b9c
commit
28f60e77be
7 changed files with 0 additions and 0 deletions
60
examples/int_or_bool.js
Normal file
60
examples/int_or_bool.js
Normal 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")));
|
||||
Loading…
Add table
Add a link
Reference in a new issue