[project @ 2002-05-31 12:22:33 by panne]
[packages/containers.git] / Text / ParserCombinators / Parsec / examples / Mondrian / Prelude.m
1 package Prelude
2 { import Foo
3
4 ; class List extends Mondrian
5 ; class Nil extends List
6 ; class Cons extends List
7     { head :: Mondrian
8     ; tail :: List
9     }
10     
11 ; map = \f -> \as ->
12     case as of
13       { Nil -> new Nil
14       ; Cons{ a :: Mondrian; a = head; as :: List; as = tail } ->
15           new Cons{ head = f a; tail = map f as }
16       }
17       
18 ; class Boolean extends Mondrian
19 ; class True extends Boolean
20 ; class False extends Boolean
21       
22 ; cond = \b -> \t -> \e ->
23     case b of
24       { True -> t
25       ; False -> e
26       }
27       
28 ; fac = \n -> cond (n == 0) 1 (n * (fac (n - 1)))
29
30 ; I :: a -> a
31 ; I = \x -> x
32
33 ; K :: a -> b -> a
34 ; K = \x -> \y -> x
35
36 ; S :: (a -> b -> c) -> (a -> b) -> (a -> c)
37 ; S = \f -> \g -> \x -> f x (g x)
38
39 ; Compose :: (b -> c) -> (a -> b) -> (a -> c)
40 ; Compose = \f -> \g -> \x -> f (g x)
41
42 ; Twice :: (a -> a) -> (a -> a)
43 ; Twice = \f -> Compose f f
44
45 ; main = Twice I 3
46 }