X-Git-Url: http://git.tomasm.cz/fp.git/blobdiff_plain/28fcab78ad1b6c3f56708f38fbc74457ae36479a..afc027ed2ff6fdf1aba286c4b6501ee240e36183:/src/HM/Parser.hs?ds=sidebyside diff --git a/src/HM/Parser.hs b/src/HM/Parser.hs index 47c4649..54e1e6a 100644 --- a/src/HM/Parser.hs +++ b/src/HM/Parser.hs @@ -13,7 +13,7 @@ module HM.Parser ( tRead - , parseTerm + , parseTypedTerm ) where import Data.Char (isAsciiLower, isAsciiUpper) @@ -46,7 +46,8 @@ instance Show Term where instance Show TypedTerm where show (NTTerm t) = show t - show (TTerm t tp) = braced $ show t ++ " :: " ++ show tp + show (TTerm (Var x) tp) = x ++ " :: " ++ show tp + show (TTerm t tp) = braced (show t) ++ " :: " ++ show tp instance Show Type where show (Primitive t) = t @@ -65,11 +66,13 @@ tRead s = case parseOnly (parseTypedTerm <* endOfInput) (T.pack s) of parseTerm :: Parser Term parseTerm = parseLet <|> parseApp <|> + parseBraces parseTerm <|> parseVar <|> parseLambda parseTermNoApp :: Parser Term -parseTermNoApp = parseLet <|> +parseTermNoApp = parseBraces parseTerm <|> + parseLet <|> parseVar <|> parseLambda @@ -82,13 +85,13 @@ parseTypeAndTerm p = do parseTypedTermNoApp :: Parser TypedTerm -parseTypedTermNoApp = parseBraces parseTypedTerm <|> - parseTypeAndTerm parseTermNoApp <|> +parseTypedTermNoApp = parseTypeAndTerm parseTermNoApp <|> + parseBraces parseTypedTerm <|> (NTTerm <$> parseTermNoApp) parseTypedTerm :: Parser TypedTerm -parseTypedTerm = parseBraces parseTypedTerm <|> - parseTypeAndTerm parseTerm <|> +parseTypedTerm = parseTypeAndTerm parseTerm <|> + parseBraces parseTypedTerm <|> (NTTerm <$> parseTerm) parseType :: Parser Type