projekty
/
fp.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
lambda for HM
[fp.git]
/
src
/
Lambda
/
Parser
/
Fancy.hs
diff --git
a/src/Lambda/Parser/Fancy.hs
b/src/Lambda/Parser/Fancy.hs
index
10231b8
..
f7a523d
100644
(file)
--- a/
src/Lambda/Parser/Fancy.hs
+++ b/
src/Lambda/Parser/Fancy.hs
@@
-9,15
+9,20
@@
-- Maintainer : tomik.musil@gmail.com
-- Stability : experimental
--
-- Maintainer : tomik.musil@gmail.com
-- Stability : experimental
--
--- Parser for λ-terms.
'.
' in λ implies brackets to the end of the context.
+-- Parser for λ-terms.
\'.\
' in λ implies brackets to the end of the context.
-- TODO: proper documentation
module Lambda.Parser.Fancy
-- TODO: proper documentation
module Lambda.Parser.Fancy
- ( tRead
+ (
+ -- * Main parser
+ tRead
, parseTerm
, parseTerm
+ -- * Auxiliary parsers
+ , parseVar
) where
) where
+import Data.Char (isAsciiLower)
import Data.Text as T hiding (map)
import Data.Attoparsec.Text
import Control.Applicative
import Data.Text as T hiding (map)
import Data.Attoparsec.Text
import Control.Applicative
@@
-52,12
+57,12
@@
tRead s = case parseOnly (parseTerm <* endOfInput) (T.pack s) of
parseVar :: Parser Term
parseVar = do
parseVar :: Parser Term
parseVar = do
- x <- many1
(letter <|> digit)
+ x <- many1
letter
return $! Var x
parseLambda :: Parser Term
parseLambda = do
return $! Var x
parseLambda :: Parser Term
parseLambda = do
- char '\\' <|> char 'λ'
+ char '\\' <|> char 'λ'
<|> char 'L'
vars <- sepBy1 parseVar (char ' ')
char '.'
t <- parseTerm
vars <- sepBy1 parseVar (char ' ')
char '.'
t <- parseTerm