-{-# 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 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 Lambda.Term
+-- $setup
+-- >>> import Test.QuickCheck
+-- >>> import Test.Term
+
-- |
-- >>> print $ Lambda "x" (Var "x")
-- (λx.x)
parseVar :: Parser Term
parseVar = do
- x <- many1 (letter <|> digit)
+ x <- many1 letter
return $! Var x
parseLambda :: Parser Term
parseLambda = do
- char '\\' <|> char 'λ'
+ char '\\' <|> char 'λ' <|> char 'L'
vars <- sepBy1 parseVar (char ' ')
char '.'
t <- parseTerm