projekty
/
fp.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Lambda
[fp.git]
/
Lambda.hs
diff --git
a/lambda.hs
b/Lambda.hs
similarity index 77%
rename from
lambda.hs
rename to
Lambda.hs
index
356412d
..
d9bdaee
100644
(file)
--- 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
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
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
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
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 '\\'
parseLambda :: Parser Term
parseLambda = do
char '\\'
-
x
<- parseVar
+
(Var x)
<- parseVar
char '.'
t <- parseTerm
return $! Lambda x t
char '.'
t <- parseTerm
return $! Lambda x t
-
parseApp :: Parser Term
parseApp = do
char '('
parseApp :: Parser Term
parseApp = do
char '('