on master help sign in
Add separate representations for Ints and Floats.
commit6c47a84f968e8114e277991daba975a9d3cfacdd authorevancz <info@elm-lang.org> dateThu 19 Jul 2012, 11:47 (14 years ago) parent0b99ea4
3 files changed+13−5
elm/src/Ast.hs+2−1 elm/src/Gen/CompileToJS.hs+2−1 elm/src/Parse/ParseExpr.hs+9−3
elm/src/Ast.hs+2−1
@@ -22,7 +22,8 @@ type JSFFI = ( [(String, Expr, String, Type)]
2222data Pattern = PData String [Pattern] | PVar String | PAnything
2323 deriving (Eq)
2424
25−data Expr = Number Int
25+data Expr = IntNum Int
26+ | FloatNum Float
2627 | Chr Char
2728 | Str String
2829 | Boolean Bool
elm/src/Gen/CompileToJS.hs+2−1
@@ -93,7 +93,8 @@ jsImport' (modul, Hiding vs) =
9393
9494toJS expr =
9595 case expr of
96− Number n -> show n
96+ IntNum n -> show n
97+ FloatNum n -> show n
9798 Var x -> x
9899 Chr c -> show c
99100 Str s -> "Value.str" ++ parens (show s)
elm/src/Parse/ParseExpr.hs+9−3
@@ -12,13 +12,19 @@ import Patterns
1212import Binops
1313
1414import Guid
15−import Types (Type (VarT))
15+import Types (Type (VarT), Scheme (Forall))
1616
1717
1818-------- Basic Terms --------
1919
2020numTerm :: (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)
26+ string "."
27+ ('.':) <$> many1 digit
2228
2329strTerm :: (Monad m) => ParsecT [Char] u m Expr
2430strTerm = liftM Str . expecting "string" . betwixt '"' '"' . many $
@@ -113,7 +119,7 @@ assignExpr = do
113119
114120
115121def = do (fs,es) <- unzip <$> assignExpr
116− return (fs, es, mapM (\_ -> liftM VarT guid) fs)
122+ return (fs, es, map (\_ -> Forall [0] [] (VarT 0)) fs)
117123
118124parseDef str =
119125 case parse def "" str of