2 | import Prelude.Basics
11 | %integerLit fromInteger
15 | interface Num ty where
17 | (+) : ty -> ty -> ty
18 | (*) : ty -> ty -> ty
20 | fromInteger : Integer -> ty
22 | %allow_overloads fromInteger
26 | interface Num ty => Neg ty where
30 | (-) : ty -> ty -> ty
39 | subtract : Neg ty => ty -> ty -> ty
44 | interface Num ty => Abs ty where
50 | interface Num ty => Fractional ty where
51 | constructor MkFractional
53 | (/) : ty -> ty -> ty
60 | interface Num ty => Integral ty where
61 | constructor MkIntegral
63 | div : ty -> ty -> ty
65 | mod : ty -> ty -> ty
74 | (+) = prim__add_Integer
75 | (*) = prim__mul_Integer
81 | negate x = prim__sub_Integer 0 x
82 | (-) = prim__sub_Integer
86 | abs x = if x < 0 then -x else x
89 | Integral Integer where
92 | False => prim__div_Integer x y
95 | False => prim__mod_Integer x y
103 | defaultInteger : Num Integer
104 | defaultInteger = %search
111 | (+) = prim__add_Int
112 | (*) = prim__mul_Int
113 | fromInteger = prim__cast_IntegerInt
118 | negate x = prim__sub_Int 0 x
119 | (-) = prim__sub_Int
123 | abs x = if x < 0 then -x else x
129 | False => prim__div_Int x y
132 | False => prim__mod_Int x y
139 | (+) = prim__add_Int8
140 | (*) = prim__mul_Int8
141 | fromInteger = prim__cast_IntegerInt8
146 | negate x = prim__sub_Int8 0 x
147 | (-) = prim__sub_Int8
151 | abs x = if x < 0 then -x else x
154 | Integral Int8 where
157 | False => prim__div_Int8 x y
160 | False => prim__mod_Int8 x y
167 | (+) = prim__add_Int16
168 | (*) = prim__mul_Int16
169 | fromInteger = prim__cast_IntegerInt16
174 | negate x = prim__sub_Int16 0 x
175 | (-) = prim__sub_Int16
179 | abs x = if x < 0 then -x else x
182 | Integral Int16 where
185 | False => prim__div_Int16 x y
188 | False => prim__mod_Int16 x y
195 | (+) = prim__add_Int32
196 | (*) = prim__mul_Int32
197 | fromInteger = prim__cast_IntegerInt32
202 | negate x = prim__sub_Int32 0 x
203 | (-) = prim__sub_Int32
207 | abs x = if x < 0 then -x else x
210 | Integral Int32 where
213 | False => prim__div_Int32 x y
216 | False => prim__mod_Int32 x y
223 | (+) = prim__add_Int64
224 | (*) = prim__mul_Int64
225 | fromInteger = prim__cast_IntegerInt64
230 | negate x = prim__sub_Int64 0 x
231 | (-) = prim__sub_Int64
235 | abs x = if x < 0 then -x else x
238 | Integral Int64 where
241 | False => prim__div_Int64 x y
244 | False => prim__mod_Int64 x y
251 | (+) = prim__add_Bits8
252 | (*) = prim__mul_Bits8
253 | fromInteger = prim__cast_IntegerBits8
258 | negate x = prim__sub_Bits8 0 x
259 | (-) = prim__sub_Bits8
263 | abs x = if x < 0 then -x else x
266 | Integral Bits8 where
269 | False => prim__div_Bits8 x y
272 | False => prim__mod_Bits8 x y
279 | (+) = prim__add_Bits16
280 | (*) = prim__mul_Bits16
281 | fromInteger = prim__cast_IntegerBits16
286 | negate x = prim__sub_Bits16 0 x
287 | (-) = prim__sub_Bits16
291 | abs x = if x < 0 then -x else x
294 | Integral Bits16 where
297 | False => prim__div_Bits16 x y
300 | False => prim__mod_Bits16 x y
307 | (+) = prim__add_Bits32
308 | (*) = prim__mul_Bits32
309 | fromInteger = prim__cast_IntegerBits32
314 | negate x = prim__sub_Bits32 0 x
315 | (-) = prim__sub_Bits32
319 | abs x = if x < 0 then -x else x
322 | Integral Bits32 where
325 | False => prim__div_Bits32 x y
328 | False => prim__mod_Bits32 x y
335 | (+) = prim__add_Bits64
336 | (*) = prim__mul_Bits64
337 | fromInteger = prim__cast_IntegerBits64
342 | negate x = prim__sub_Bits64 0 x
343 | (-) = prim__sub_Bits64
347 | abs x = if x < 0 then -x else x
350 | Integral Bits64 where
353 | False => prim__div_Bits64 x y
356 | False => prim__mod_Bits64 x y
362 | (+) = prim__add_Double
363 | (*) = prim__mul_Double
364 | fromInteger = prim__cast_IntegerDouble
369 | negate x = prim__negate_Double x
370 | (-) = prim__sub_Double
374 | abs x = if x < 0 then -x else x
377 | Fractional Double where
378 | (/) = prim__div_Double