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_if_redex :: Term -> Term
7 reduce_if_redex 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_if_redex t)
16 reduce_try2 :: Term -> Term
17 reduce_try2 t = case t of
22 let t' = App (reduce_try2 a) (reduce_try2 b) in
23 if (is_redex t') then reduce_try2 (reduce_if_redex t')