@@ -0,0 +1,27 @@
3+newtype Id = Id forall a. a -> a
5+runId = \id a -> case id of
8+newtype Nat = Nat forall r. r -> (r -> r) -> r
10+runNat = \nat -> case nat of
11+ Nat f -> f 0 (\n -> n + 1)
13+zero = Nat (\zero _ -> zero)
15+succ = \n -> case n of
16+ Nat f -> Nat (\zero succ -> succ (f zero succ))
18+add = \n m -> case n of
20+ Nat g -> Nat (\zero succ -> g (f zero succ) succ)
25+fourNumber = runNat four
27+main = Debug.Trace.trace "Done"