X-Git-Url: http://git.tomasm.cz/fp.git/blobdiff_plain/2d2af9eded0d0e4968cf21746f3772f61caecd73..880eb9d73e5ea9239698d8f6d294032b6e339310:/src/Lambda/Parser/Fancy.hs?ds=inline diff --git a/src/Lambda/Parser/Fancy.hs b/src/Lambda/Parser/Fancy.hs index 48593dd..3ad5728 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,12 +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 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 @@ -52,12 +57,12 @@ tRead s = case parseOnly (parseTerm <* endOfInput) (T.pack s) of 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