-- 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
- ( tRead
+ (
+ -- * 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
parseVar :: Parser Term
parseVar = do
- x <- many1 (letter <|> digit)
+ x <- many1 $ satisfy isAsciiLower
return $! Var x
parseLambda :: Parser Term
parseLambda = do
- char '\\' <|> char 'λ'
+ char '\\' <|> char 'λ' <|> char 'L'
vars <- sepBy1 parseVar (char ' ')
char '.'
t <- parseTerm