-{-# OPTIONS_GHC
- -fno-warn-unused-do-bind
- -fno-warn-orphans
-#-}
+{-# OPTIONS_GHC -fno-warn-unused-do-bind -fno-warn-orphans #-}
{-# LANGUAGE PatternSynonyms #-}
-- |
-- 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