aboutsummaryrefslogtreecommitdiffstats
path: root/examples/types-concept.milch
diff options
context:
space:
mode:
Diffstat (limited to 'examples/types-concept.milch')
-rw-r--r--examples/types-concept.milch34
1 files changed, 34 insertions, 0 deletions
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))