diff --git a/src/Language/Lambda/Parser.hs b/src/Language/Lambda/Parser.hs index f3e36f057306ac6b709838d8318bfeb2fd43a231..2465d0f28420be2be139e1f5921dc6cdf50df625 100644 --- a/src/Language/Lambda/Parser.hs +++ b/src/Language/Lambda/Parser.hs @@ -9,7 +9,7 @@ import Text.Parsec.String import Language.Lambda.Expression parseExpr :: String -> Either ParseError (LambdaExpr String) -parseExpr = parse (whitespace *> expr <* eof) "" +parseExpr kata = parse (whitespace *> expr <* eof) "" (doOperation kata) expr :: Parser (LambdaExpr String) expr = try app <|> term @@ -52,6 +52,9 @@ symbol = void . lexeme . char keyword :: String -> Parser () keyword = void . lexeme . string +doOperation "" = "" +doOperation (x:xs) = ubahKeChurch x ++ doOperation xs + ubahKeChurch :: Char -> [Char] ubahKeChurch '+' = "(\\w y x. y (w y x))" ubahKeChurch '*' = "(\\x y z . x (y z))"