on master help sign in
Int/Float conversion primitives
8784b67Edwin Brady
src/Idris/Primitives.hs+12
@@ -34,6 +34,8 @@ strToInt x = foreign_ tyInt "strToInt" [(x, tyString)]
34intToStr x = foreign_ tyString "intToStr" [(x, tyInt)]
34intToStr x = foreign_ tyString "intToStr" [(x, tyInt)]
35strToFloat x = foreign_ tyFloat "strToFloat" [(x, tyString)]
35strToFloat x = foreign_ tyFloat "strToFloat" [(x, tyString)]
36floatToStr x = foreign_ tyString "floatToStr" [(x, tyFloat)]
36floatToStr x = foreign_ tyString "floatToStr" [(x, tyFloat)]
37+intToFloat x = foreign_ tyFloat "intToFloat" [(x, tyInt)]
38+floatToInt x = foreign_ tyInt "floatToInt" [(x, tyFloat)]
37
39
38floatExp x = foreign_ tyFloat "exp" [(x, tyFloat)]
40floatExp x = foreign_ tyFloat "exp" [(x, tyFloat)]
39floatLog x = foreign_ tyFloat "log" [(x, tyFloat)]
41floatLog x = foreign_ tyFloat "log" [(x, tyFloat)]
@@ -87,6 +89,10 @@ primitives =
87 ([E.name "x"], strToFloat (fun "x")),
89 ([E.name "x"], strToFloat (fun "x")),
88 Prim (UN ["prim__floatToStr"]) (ty [FlType] StrType) 1 (c_floatToStr)
90 Prim (UN ["prim__floatToStr"]) (ty [FlType] StrType) 1 (c_floatToStr)
89 ([E.name "x"], floatToStr (fun "x")),
91 ([E.name "x"], floatToStr (fun "x")),
92+ Prim (UN ["prim__intToFloat"]) (ty [IType] FlType) 1 (c_intToFloat)
93+ ([E.name "x"], intToFloat (fun "x")),
94+ Prim (UN ["prim__floatToInt"]) (ty [FlType] IType) 1 (c_floatToInt)
95+ ([E.name "x"], floatToInt (fun "x")),
90 Prim (UN ["prim__floatExp"]) (ty [FlType] FlType) 1 (p_floatExp)
96 Prim (UN ["prim__floatExp"]) (ty [FlType] FlType) 1 (p_floatExp)
91 ([E.name "x"], floatExp (fun "x")),
97 ([E.name "x"], floatExp (fun "x")),
92 Prim (UN ["prim__floatLog"]) (ty [FlType] FlType) 1 (p_floatLog)
98 Prim (UN ["prim__floatLog"]) (ty [FlType] FlType) 1 (p_floatLog)
@@ -118,6 +124,12 @@ c_floatToStr _ = Nothing
118c_strToFloat [VConstant (Str x)] = Just $ VConstant (Fl (read x))
124c_strToFloat [VConstant (Str x)] = Just $ VConstant (Fl (read x))
119c_strToFloat _ = Nothing
125c_strToFloat _ = Nothing
120
126
127+c_floatToInt [VConstant (Fl x)] = Just $ VConstant (I (truncate x))
128+c_floatToInt _ = Nothing
129+
130+c_intToFloat [VConstant (I x)] = Just $ VConstant (Fl (fromIntegral x))
131+c_intToFloat _ = Nothing
132+
121p_floatExp [VConstant (Fl x)] = Just $ VConstant (Fl (exp x))
133p_floatExp [VConstant (Fl x)] = Just $ VConstant (Fl (exp x))
122p_floatExp _ = Nothing
134p_floatExp _ = Nothing
123p_floatLog [VConstant (Fl x)] = Just $ VConstant (Fl (log x))
135p_floatLog [VConstant (Fl x)] = Just $ VConstant (Fl (log x))