module HM.Parser
( tRead
- , parseTerm
+ , parseTypedTerm
) where
import Data.Char (isAsciiLower, isAsciiUpper)
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
parseTerm :: Parser Term
parseTerm = parseLet <|>
parseApp <|>
+ parseBraces parseTerm <|>
parseVar <|>
parseLambda
parseTermNoApp :: Parser Term
-parseTermNoApp = parseLet <|>
+parseTermNoApp = parseBraces parseTerm <|>
+ parseLet <|>
parseVar <|>
parseLambda
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