From 4002b8988c799a904ef1f359d4267ef4ad80cba3 Mon Sep 17 00:00:00 2001 From: Jan Tuomi Date: Mon, 5 Dec 2022 14:19:12 +0200 Subject: Rename project to Milch --- examples/types-concept.milch | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 examples/types-concept.milch (limited to 'examples/types-concept.milch') diff --git a/examples/types-concept.milch b/examples/types-concept.milch new file mode 100644 index 0000000..8359c6b --- /dev/null +++ b/examples/types-concept.milch @@ -0,0 +1,34 @@ +; lowercase types: polymorphic +; everything else: monomorphic + +(type compose (\[ + (\[b] c) ; f + (\[a] b)] ; g + (\[a] c))) +(let! + compose (\[f g] (\[x] (f (g x))))) + +((compose (+ 1) (+ 2)) 3) + +(type id (\[a] a)) +(let! id (\[a] a)) + +(type mod (\[Int Int] Int)) +(let! mod (\[n k] + (- n (* k (/ n k))))) + +(type not (\[Bool] Bool)) +(let! not (\[b] + (match b + true false + false true))) + +(type is-even (\[Int] Bool)) +(let! is-even (\[n] + (match (mod n 2) + 0 true + 1 false))) + +; match cannot be type annotated because its variadic +; but the match above is inferred as this: +(type match (\[a a b a b] b)) -- cgit v1.3