From cde0eee2a072f74e1f3578dc1c45955a0425d183 Mon Sep 17 00:00:00 2001 From: Tomas Musil Date: Thu, 23 Oct 2014 03:37:46 +0200 Subject: [PATCH] Lambda --- lambda.hs => Lambda.hs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) rename lambda.hs => Lambda.hs (77%) diff --git a/lambda.hs b/Lambda.hs similarity index 77% rename from lambda.hs rename to Lambda.hs index 356412d..d9bdaee 100644 --- a/lambda.hs +++ b/Lambda.hs @@ -1,15 +1,19 @@ +module Lambda where + import Data.Text as T import Data.Attoparsec.Text import Control.Applicative -data Term = Var String | Lambda Term Term | App Term Term +type VarName = String +data Term = Var VarName | Lambda VarName Term | App Term Term instance Show Term where show (Var x) = x - show (Lambda (Var x) t) = "\\" ++ x ++ "." ++ show t + show (Lambda x t) = "\\" ++ x ++ "." ++ show t show (App t r) = "(" ++ show t ++ " " ++ show r ++ ")" --instance Read Term where +tRead :: String -> Term tRead s = case parseOnly (parseTerm <* endOfInput) (T.pack s) of (Right t) -> t (Left e) -> error e @@ -22,12 +26,11 @@ parseVar = do parseLambda :: Parser Term parseLambda = do char '\\' - x <- parseVar + (Var x) <- parseVar char '.' t <- parseTerm return $! Lambda x t - parseApp :: Parser Term parseApp = do char '(' -- 2.4.2