@@ -12,13 +12,19 @@ import Patterns
12import Binops
12import Binops
14import Guid
14import Guid
15−import Types (Type (VarT))
15+import Types (Type (VarT), Scheme (Forall))
18-------- Basic Terms --------
18-------- Basic Terms --------
20numTerm :: (Monad m) => ParsecT [Char] u m Expr
20numTerm :: (Monad m) => ParsecT [Char] u m Expr
21−numTerm = liftM (Number . read) (many1 digit) <?> "number"
21+numTerm = toExpr <$> (preNum <?> "number")
22+ where toExpr n | '.' `elem` n = FloatNum (read n)
23+ | otherwise = IntNum (read n)
24+ preNum = (++) <$> many1 digit <*> option "" postNum
25+ postNum = do try $ lookAhead (string "." >> digit)
27+ ('.':) <$> many1 digit
23strTerm :: (Monad m) => ParsecT [Char] u m Expr
29strTerm :: (Monad m) => ParsecT [Char] u m Expr
24strTerm = liftM Str . expecting "string" . betwixt '"' '"' . many $
30strTerm = liftM Str . expecting "string" . betwixt '"' '"' . many $
@@ -113,7 +119,7 @@ assignExpr = do
115def = do (fs,es) <- unzip <$> assignExpr
121def = do (fs,es) <- unzip <$> assignExpr
116− return (fs, es, mapM (\_ -> liftM VarT guid) fs)
122+ return (fs, es, map (\_ -> Forall [0] [] (VarT 0)) fs)
118parseDef str =
124parseDef str =
119 case parse def "" str of
125 case parse def "" str of