+++ /dev/null
--- type declarations
-data List: * -> *
- = { Nil: \/a. List a
- ; Cons : \/a. a -> List a -> List a
- };
-
-data Maybe : * -> * -> *
- = { Left: \/a,b. a -> Maybe a b
- ; Right: \/a,b. b -> Maybe a b
- }
-
--- value declarations
-let id : \/a. a->a
- = /\a. \x:a. x;
-
-letrec { map: \/a,b. a -> b -> List a -> List b
- = /\a,b.
- \f: a->b,xs:List a.
- case (xs) of
- { Nil =>Nil
- ; Cons => \x:a, xx: List a.
- Cons (f x) (map a b f xx)
- }
- at {a:*}
- };
-
-letrec { reverse: \/a. List a -> List a
- = /\a.\xs:List a.
- case xs of
- { Nil => Nil
- ; Cons x,xx => append (reverse xx) (Cons x Nil)
- }
- at {a:*}
- };
-
-letrec { append: \/a. |~|_dummy:List a.|~|_:List a.List a
- = /\a.\xs:List a, ys:List a.
- case xs of
- { Nil => ys
- ; Cons x:a,xx: List a => Cons x (append xx ys)
- }
- at {a:*}
- }
-
-
-
-