1 data Term = I | S | K | App Term Term deriving (Eq, Show)
3 skomega = (App (App (App S I) I) (App (App S I) I))
4 test = (App (App K I) skomega)
6 reduce_one_step :: Term -> Term
7 reduce_one_step t = case t of
10 App (App (App S a) b) c -> App (App a c) (App b c)
13 is_redex :: Term -> Bool
14 is_redex t = not (t == reduce_one_step t)
16 reduce :: Term -> Term
22 let t' = App (reduce a) (reduce b) in
23 if (is_redex t') then reduce (reduce_one_step t')