From: Tomas Musil Date: Thu, 23 Oct 2014 01:37:46 +0000 (+0200) Subject: Lambda X-Git-Url: http://git.tomasm.cz/fp.git/commitdiff_plain/cde0eee2a072f74e1f3578dc1c45955a0425d183 Lambda --- 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 '('