X-Git-Url: http://git.tomasm.cz/fp.git/blobdiff_plain/e26e565842cd4c347f93b3bbf1a4363f05d1cc2f..HEAD:/src/Lambda/Parser/Fancy.hs diff --git a/src/Lambda/Parser/Fancy.hs b/src/Lambda/Parser/Fancy.hs index 6e87da1..f7a523d 100644 --- 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 #-} -- | @@ -12,18 +9,30 @@ -- 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) @@ -48,12 +57,12 @@ tRead s = case parseOnly (parseTerm <* endOfInput) (T.pack s) of 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