package Prelude { import Foo ; class List extends Mondrian ; class Nil extends List ; class Cons extends List { head :: Mondrian ; tail :: List } ; map = \f -> \as -> case as of { Nil -> new Nil ; Cons{ a :: Mondrian; a = head; as :: List; as = tail } -> new Cons{ head = f a; tail = map f as } } ; class Boolean extends Mondrian ; class True extends Boolean ; class False extends Boolean ; cond = \b -> \t -> \e -> case b of { True -> t ; False -> e } ; fac = \n -> cond (n == 0) 1 (n * (fac (n - 1))) ; I :: a -> a ; I = \x -> x ; K :: a -> b -> a ; K = \x -> \y -> x ; S :: (a -> b -> c) -> (a -> b) -> (a -> c) ; S = \f -> \g -> \x -> f x (g x) ; Compose :: (b -> c) -> (a -> b) -> (a -> c) ; Compose = \f -> \g -> \x -> f (g x) ; Twice :: (a -> a) -> (a -> a) ; Twice = \f -> Compose f f ; main = Twice I 3 }