on master help sign in
Add separate representations for Ints and Floats.
6c47a84evancz
elm/src/Ast.hs+2−1
@@ -22,7 +22,8 @@ type JSFFI = ( [(String, Expr, String, Type)]
22data Pattern = PData String [Pattern] | PVar String | PAnything
22data Pattern = PData String [Pattern] | PVar String | PAnything
23 deriving (Eq)
23 deriving (Eq)
24
24
25−data Expr = Number Int
25+data Expr = IntNum Int
26+ | FloatNum Float
26 | Chr Char
27 | Chr Char
27 | Str String
28 | Str String
28 | Boolean Bool
29 | Boolean Bool
elm/src/Gen/CompileToJS.hs+2−1
@@ -93,7 +93,8 @@ jsImport' (modul, Hiding vs) =
93
93
94toJS expr =
94toJS expr =
95 case expr of
95 case expr of
96+ IntNum n -> show n
96− Number n -> show n
97+ FloatNum n -> show n
97 Var x -> x
98 Var x -> x
98 Chr c -> show c
99 Chr c -> show c
99 Str s -> "Value.str" ++ parens (show s)
100 Str s -> "Value.str" ++ parens (show s)
elm/src/Parse/ParseExpr.hs+9−3
@@ -12,13 +12,19 @@ import Patterns
12import Binops
12import Binops
13
13
14import Guid
14import Guid
15−import Types (Type (VarT))
15+import Types (Type (VarT), Scheme (Forall))
16
16
17
17
18-------- Basic Terms --------
18-------- Basic Terms --------
19
19
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)
26+ string "."
27+ ('.':) <$> many1 digit
22
28
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
113
119
114
120
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)
117
123
118parseDef str =
124parseDef str =
119 case parse def "" str of
125 case parse def "" str of