git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
Int literals #1061
fb12693Phil Freeman
examples/passing/Operators.purs+14−14
@@ -12,9 +12,9 @@ module Main where
12 test1 :: forall n. (Num n) => n -> n -> (n -> n -> n) -> n
12 test1 :: forall n. (Num n) => n -> n -> (n -> n -> n) -> n
13 test1 x y z = x * y + z x y
13 test1 x y z = x * y + z x y
14
14
15− test2 = (\x -> x.foo false) { foo : \_ -> 1 }
15+ test2 = (\x -> x.foo false) { foo : \_ -> 1.0 }
16
16
17− test3 = (\x y -> x)(1 + 2 * (1 + 2)) (true && (false || false))
17+ test3 = (\x y -> x)(1.0 + 2.0 * (1.0 + 2.0)) (true && (false || false))
18
18
19 k = \x -> \y -> x
19 k = \x -> \y -> x
20
20
@@ -25,9 +25,9 @@ module Main where
25 (%%) :: Number -> Number -> Number
25 (%%) :: Number -> Number -> Number
26 (%%) x y = x * y + y
26 (%%) x y = x * y + y
27
27
28− test5 = 1 %% 2 %% 3
28+ test5 = 1.0 %% 2.0 %% 3.0
29
29
30− test6 = ((\x -> x) `k` 2) 3
30+ test6 = ((\x -> x) `k` 2.0) 3.0
31
31
32 (<+>) :: String -> String -> String
32 (<+>) :: String -> String -> String
33 (<+>) = \s1 s2 -> s1 ++ s2
33 (<+>) = \s1 s2 -> s1 ++ s2
@@ -49,7 +49,7 @@ module Main where
49 (...) :: forall a. [a] -> [a] -> [a]
49 (...) :: forall a. [a] -> [a] -> [a]
50 (...) = \as -> \bs -> as
50 (...) = \as -> \bs -> as
51
51
52− test11 = [1, 2, 3] ... [4, 5, 6]
52+ test11 = [1.0, 2.0, 0.0] ... [4.0, 5.0, 6.0]
53
53
54 test12 (<%>) a b = a <%> b
54 test12 (<%>) a b = a <%> b
55
55
@@ -62,21 +62,21 @@ module Main where
62 test15 a b = const false $ a `test14` b
62 test15 a b = const false $ a `test14` b
63
63
64 test17 :: Number
64 test17 :: Number
65− test17 = negate (-1)
65+ test17 = negate (-1.0)
66
66
67 test18 :: Number
67 test18 :: Number
68− test18 = negate $ negate 1
68+ test18 = negate $ negate 1.0
69
69
70 test19 :: Number
70 test19 :: Number
71− test19 = negate $ negate (-1)
71+ test19 = negate $ negate (-1.0)
72
72
73 test20 :: Number
73 test20 :: Number
74− test20 = 1 @ 2
74+ test20 = 1.0 @ 2.0
75 where
75 where
76 (@) x y = x + y * y
76 (@) x y = x + y * y
77
77
78 main = do
78 main = do
79− let t1 = test1 1 2 (\x y -> x + y)
79+ let t1 = test1 1.0 2.0 (\x y -> x + y)
80 let t2 = test2
80 let t2 = test2
81 let t3 = test3
81 let t3 = test3
82 let t4 = test4
82 let t4 = test4
@@ -87,10 +87,10 @@ module Main where
87 let t9 = test9
87 let t9 = test9
88 let t10 = test10
88 let t10 = test10
89 let t11 = test11
89 let t11 = test11
90− let t12 = test12 k 1 2
90+ let t12 = test12 k 1.0 2.0
91− let t13 = test13 k 1 2
91+ let t13 = test13 k 1.0 2.0
92− let t14 = test14 1 2
92+ let t14 = test14 1.0 2.0
93− let t15 = test15 1 2
93+ let t15 = test15 1.0 2.0
94 let t17 = test17
94 let t17 = test17
95 let t18 = test18
95 let t18 = test18
96 let t19 = test19
96 let t19 = test19
psc-docs/Main.hs+1−1
@@ -207,7 +207,7 @@ prettyPrintType' :: P.Type -> String
207prettyPrintType' = P.prettyPrintType . P.everywhereOnTypes dePrim
207prettyPrintType' = P.prettyPrintType . P.everywhereOnTypes dePrim
208 where
208 where
209 dePrim ty@(P.TypeConstructor (P.Qualified _ name))
209 dePrim ty@(P.TypeConstructor (P.Qualified _ name))
210− | ty == P.tyBoolean || ty == P.tyNumber || ty == P.tyString =
210+ | ty == P.tyBoolean || ty == P.tyNumber || ty == P.tyString || ty == P.tyChar || ty == P.tyInt =
211 P.TypeConstructor $ P.Qualified Nothing name
211 P.TypeConstructor $ P.Qualified Nothing name
212 dePrim other = other
212 dePrim other = other
213
213
src/Language/PureScript/Environment.hs+14
@@ -184,12 +184,24 @@ tyFunction = primTy "Function"
184tyString :: Type
184tyString :: Type
185tyString = primTy "String"
185tyString = primTy "String"
186
186
187+-- |
188+-- Type constructor for strings
189+--
190+tyChar :: Type
191+tyChar = primTy "Char"
192+
187-- |
193-- |
188-- Type constructor for numbers
194-- Type constructor for numbers
189--
195--
190tyNumber :: Type
196tyNumber :: Type
191tyNumber = primTy "Number"
197tyNumber = primTy "Number"
192
198
199+-- |
200+-- Type constructor for integers
201+--
202+tyInt :: Type
203+tyInt = primTy "Int"
204+
193-- |
205-- |
194-- Type constructor for booleans
206-- Type constructor for booleans
195--
207--
@@ -222,7 +234,9 @@ primTypes = M.fromList [ (primName "Function" , (FunKind Star (FunKind Star Star
222 , (primName "Array" , (FunKind Star Star, ExternData))
234 , (primName "Array" , (FunKind Star Star, ExternData))
223 , (primName "Object" , (FunKind (Row Star) Star, ExternData))
235 , (primName "Object" , (FunKind (Row Star) Star, ExternData))
224 , (primName "String" , (Star, ExternData))
236 , (primName "String" , (Star, ExternData))
237+ , (primName "Char" , (Star, ExternData))
225 , (primName "Number" , (Star, ExternData))
238 , (primName "Number" , (Star, ExternData))
239+ , (primName "Int" , (Star, ExternData))
226 , (primName "Boolean" , (Star, ExternData)) ]
240 , (primName "Boolean" , (Star, ExternData)) ]
227
241
228-- |
242-- |
src/Language/PureScript/TypeChecker/Types.hs+7−3
@@ -212,7 +212,8 @@ infer val = rethrow (onErrorMessages (ErrorInferringType val)) $ infer' val
212-- Infer a type for a value
212-- Infer a type for a value
213--
213--
214infer' :: Expr -> UnifyT Type Check Expr
214infer' :: Expr -> UnifyT Type Check Expr
215+infer' v@(NumericLiteral (Left _)) = return $ TypedValue True v tyInt
215−infer' v@(NumericLiteral _) = return $ TypedValue True v tyNumber
216+infer' v@(NumericLiteral (Right _)) = return $ TypedValue True v tyNumber
216infer' v@(StringLiteral _) = return $ TypedValue True v tyString
217infer' v@(StringLiteral _) = return $ TypedValue True v tyString
217infer' v@(BooleanLiteral _) = return $ TypedValue True v tyBoolean
218infer' v@(BooleanLiteral _) = return $ TypedValue True v tyBoolean
218infer' (ArrayLiteral vals) = do
219infer' (ArrayLiteral vals) = do
@@ -350,7 +351,8 @@ inferProperty _ _ = return Nothing
350inferBinder :: Type -> Binder -> UnifyT Type Check (M.Map Ident Type)
351inferBinder :: Type -> Binder -> UnifyT Type Check (M.Map Ident Type)
351inferBinder _ NullBinder = return M.empty
352inferBinder _ NullBinder = return M.empty
352inferBinder val (StringBinder _) = val =?= tyString >> return M.empty
353inferBinder val (StringBinder _) = val =?= tyString >> return M.empty
353−inferBinder val (NumberBinder _) = val =?= tyNumber >> return M.empty
354+inferBinder val (NumberBinder (Left _)) = val =?= tyInt >> return M.empty
355+inferBinder val (NumberBinder (Right _)) = val =?= tyNumber >> return M.empty
354inferBinder val (BooleanBinder _) = val =?= tyBoolean >> return M.empty
356inferBinder val (BooleanBinder _) = val =?= tyBoolean >> return M.empty
355inferBinder val (VarBinder name) = return $ M.singleton name val
357inferBinder val (VarBinder name) = return $ M.singleton name val
356inferBinder val (ConstructorBinder ctor binders) = do
358inferBinder val (ConstructorBinder ctor binders) = do
@@ -458,7 +460,9 @@ check' val u@(TUnknown _) = do
458 (val'', ty') <- instantiatePolyTypeWithUnknowns val' ty
460 (val'', ty') <- instantiatePolyTypeWithUnknowns val' ty
459 ty' =?= u
461 ty' =?= u
460 return $ TypedValue True val'' ty'
462 return $ TypedValue True val'' ty'
461−check' v@(NumericLiteral _) t | t == tyNumber =
463+check' v@(NumericLiteral (Left _)) t | t == tyInt =
464+ return $ TypedValue True v t
465+check' v@(NumericLiteral (Right _)) t | t == tyNumber =
462 return $ TypedValue True v t
466 return $ TypedValue True v t
463check' v@(StringLiteral _) t | t == tyString =
467check' v@(StringLiteral _) t | t == tyString =
464 return $ TypedValue True v t
468 return $ TypedValue True v t
tests/prelude.purs+4−4
@@ -194,9 +194,9 @@ module Prelude
194
194
195 instance semiringNumber :: Semiring Number where
195 instance semiringNumber :: Semiring Number where
196 (+) = numAdd
196 (+) = numAdd
197− zero = 0
197+ zero = 0.0
198 (*) = numMul
198 (*) = numMul
199− one = 1
199+ one = 1.0
200
200
201 instance semiringUnit :: Semiring Unit where
201 instance semiringUnit :: Semiring Unit where
202 (+) _ _ = unit
202 (+) _ _ = unit
@@ -226,7 +226,7 @@ module Prelude
226
226
227 instance moduloSemiringNumber :: ModuloSemiring Number where
227 instance moduloSemiringNumber :: ModuloSemiring Number where
228 (/) = numDiv
228 (/) = numDiv
229− mod _ _ = 0
229+ mod _ _ = 0.0
230
230
231 instance moduloSemiringUnit :: ModuloSemiring Unit where
231 instance moduloSemiringUnit :: ModuloSemiring Unit where
232 (/) _ _ = unit
232 (/) _ _ = unit
@@ -1042,4 +1042,4 @@ module Control.Monad.ST where
1042 """ :: forall a r. (forall h. Eff (st :: ST h | r) a) -> Eff r a
1042 """ :: forall a r. (forall h. Eff (st :: ST h | r) a) -> Eff r a
1043
1043
1044 pureST :: forall a. (forall h r. Eff (st :: ST h | r) a) -> a
1044 pureST :: forall a. (forall h r. Eff (st :: ST h | r) a) -> a
1045− pureST st = runPure (runST st)
1045+ pureST st = runPure (runST st)