X-Git-Url: http://git.tomasm.cz/fp.git/blobdiff_plain/7be2a6546f666dbbc5e3fe756766ee17e3c3d46a..763aa13445f67ffe289fe6f3186dd269a909d8a5:/src/Lambda/Parser/Fancy.hs?ds=sidebyside diff --git a/src/Lambda/Parser/Fancy.hs b/src/Lambda/Parser/Fancy.hs index b0f0c2d..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,15 +9,20 @@ -- 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 @@ -55,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