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
48593dd
..
f7a523d
100644
(file)
--- a/
src/Lambda/Parser/Fancy.hs
+++ b/
src/Lambda/Parser/Fancy.hs
@@
-1,7
+1,4
@@
-{-# OPTIONS_GHC
- -fno-warn-unused-do-bind
- -fno-warn-orphans
-#-}
+{-# OPTIONS_GHC -fno-warn-unused-do-bind -fno-warn-orphans #-}
{-# LANGUAGE PatternSynonyms #-}
-- |
{-# LANGUAGE PatternSynonyms #-}
-- |
@@
-12,12
+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
-- TODO: proper documentation
-module Lambda.Parser.Fancy where
+module Lambda.Parser.Fancy
+ (
+ -- * Main parser
+ tRead
+ , parseTerm
+ -- * Auxiliary parsers
+ , parseVar
+ ) 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