multiple applications
[fp.git] / src / Lambda.hs
index 5165bb8..54c4065 100644 (file)
@@ -28,22 +28,38 @@ parseVar = do
 parseLambda :: Parser Term
 parseLambda = do
   char '\\'
 parseLambda :: Parser Term
 parseLambda = do
   char '\\'
-  (Var x) <- parseVar
+  vars <- sepBy1 parseVar (char ' ')
   char '.'
   t <- parseTerm
   char '.'
   t <- parseTerm
-  return $! Lambda x t
+  return $! createLambda vars t
+
+createLambda :: [Term] -> Term -> Term
+createLambda (Var x : vs) t = Lambda x $ createLambda vs t
+createLambda [] t = t
+createLambda _ _ = error "createLambda failed"
 
 parseApp :: Parser Term
 parseApp = do
 
 parseApp :: Parser Term
 parseApp = do
+  aps <- sepBy1 (parseBraces <|> parseLambda <|> parseVar) (char ' ')
+  return $! createApp aps
+
+createApp :: [Term] -> Term
+createApp [t] = t
+createApp (t:ts:tss) = createApp (App t ts : tss)
+createApp [] = error "empty createApp"
+
+parseBraces :: Parser Term
+parseBraces = do
   char '('
   t <- parseTerm
   char '('
   t <- parseTerm
-  char ' '
-  r <- parseTerm
   char ')'
   char ')'
-  return $! App t r
+  return 
 
 parseTerm :: Parser Term
 
 parseTerm :: Parser Term
-parseTerm = parseVar <|> parseLambda <|> parseApp
+parseTerm = parseApp <|>
+            parseBraces <|>
+            parseLambda <|>
+            parseVar
 
 -------------------------------------------------
 
 
 -------------------------------------------------