@@ -4,14 +4,28 @@ import Transformer (NamelessTerm (NamelessVariable, NamelessApplication, Nameles
4
4
5
5
generateTerm :: Term -> String
6
6
generateTerm (Variable var) = [var]
7
- generateTerm (Application lhs rhs) = concatMap (\ term -> case term of
8
- var@ (Variable _) -> generateTerm var
9
- _ -> ' (' : generateTerm term ++ [' )' ]) [lhs, rhs]
7
+ generateTerm (Application lhs rhs) =
8
+ let generatedLhs = case lhs of
9
+ var@ (Variable _) -> generateTerm var
10
+ application@ (Application _ _) -> generateTerm application
11
+ abstraction@ (Abstraction _ _ ) -> ' (' : generateTerm abstraction ++ [' )' ]
12
+ generatedRhs = case rhs of
13
+ var@ (Variable _) -> generateTerm var
14
+ application@ (Application _ _) -> ' (' : generateTerm application ++ [' )' ]
15
+ abstraction@ (Abstraction _ _) -> ' (' : generateTerm abstraction ++ [' )' ]
16
+ in generatedLhs ++ generatedRhs
10
17
generateTerm (Abstraction argument body) = 'λ': argument: ' .' : generateTerm body
11
18
12
19
generateNamelessTerm :: NamelessTerm -> String
13
20
generateNamelessTerm (NamelessVariable var) = show var
14
- generateNamelessTerm (NamelessApplication lhs rhs) = concatMap (\ term -> case term of
15
- var@ (NamelessVariable _) -> generateNamelessTerm var
16
- _ -> ' (' : generateNamelessTerm term ++ [' )' ]) [lhs, rhs]
21
+ generateNamelessTerm (NamelessApplication lhs rhs) =
22
+ let generatedLhs = case lhs of
23
+ var@ (NamelessVariable _) -> generateNamelessTerm var
24
+ application@ (NamelessApplication _ _) -> generateNamelessTerm application
25
+ abstraction@ (NamelessAbstraction _ ) -> ' (' : generateNamelessTerm abstraction ++ [' )' ]
26
+ generatedRhs = case rhs of
27
+ var@ (NamelessVariable _) -> generateNamelessTerm var
28
+ application@ (NamelessApplication _ _) -> ' (' : generateNamelessTerm application ++ [' )' ]
29
+ abstraction@ (NamelessAbstraction _) -> ' (' : generateNamelessTerm abstraction ++ [' )' ]
30
+ in generatedLhs ++ generatedRhs
17
31
generateNamelessTerm (NamelessAbstraction body) = 'λ': generateNamelessTerm body
0 commit comments