on master help sign in
Merge pull request #393 from Ralith/additional-arithmetic-instances
c2623f4Edwin Brady
lib/Builtins.idr+76
@@ -259,6 +259,82 @@ instance Num Float where
259 abs x = if x < (prim__toFloatBigInt 0) then -x else x
259 abs x = if x < (prim__toFloatBigInt 0) then -x else x
260 fromInteger = prim__toFloatBigInt
260 fromInteger = prim__toFloatBigInt
261
261
262+instance Num Bits8 where
263+ (+) = prim__addB8
264+ (-) = prim__subB8
265+ (*) = prim__mulB8
266+ abs = id
267+ fromInteger = prim__truncBigInt_B8
268+
269+instance Num Bits16 where
270+ (+) = prim__addB16
271+ (-) = prim__subB16
272+ (*) = prim__mulB16
273+ abs = id
274+ fromInteger = prim__truncBigInt_B16
275+
276+instance Num Bits32 where
277+ (+) = prim__addB32
278+ (-) = prim__subB32
279+ (*) = prim__mulB32
280+ abs = id
281+ fromInteger = prim__truncBigInt_B32
282+
283+instance Num Bits64 where
284+ (+) = prim__addB64
285+ (-) = prim__subB64
286+ (*) = prim__mulB64
287+ abs = id
288+ fromInteger = prim__truncBigInt_B64
289+
290+instance Eq Bits8 where
291+ x == y = intToBool (prim__eqB8 x y)
292+
293+instance Eq Bits16 where
294+ x == y = intToBool (prim__eqB16 x y)
295+
296+instance Eq Bits32 where
297+ x == y = intToBool (prim__eqB32 x y)
298+
299+instance Eq Bits64 where
300+ x == y = intToBool (prim__eqB64 x y)
301+
302+instance Ord Bits8 where
303+ (<) = boolOp prim__ltB8
304+ (>) = boolOp prim__gtB8
305+ (<=) = boolOp prim__lteB8
306+ (>=) = boolOp prim__gteB8
307+ compare l r = if l < r then LT
308+ else if l > r then GT
309+ else EQ
310+
311+instance Ord Bits16 where
312+ (<) = boolOp prim__ltB16
313+ (>) = boolOp prim__gtB16
314+ (<=) = boolOp prim__lteB16
315+ (>=) = boolOp prim__gteB16
316+ compare l r = if l < r then LT
317+ else if l > r then GT
318+ else EQ
319+
320+instance Ord Bits32 where
321+ (<) = boolOp prim__ltB32
322+ (>) = boolOp prim__gtB32
323+ (<=) = boolOp prim__lteB32
324+ (>=) = boolOp prim__gteB32
325+ compare l r = if l < r then LT
326+ else if l > r then GT
327+ else EQ
328+
329+instance Ord Bits64 where
330+ (<) = boolOp prim__ltB64
331+ (>) = boolOp prim__gtB64
332+ (<=) = boolOp prim__lteB64
333+ (>=) = boolOp prim__gteB64
334+ compare l r = if l < r then LT
335+ else if l > r then GT
336+ else EQ
337+
262partial
338partial
263div : Integer -> Integer -> Integer
339div : Integer -> Integer -> Integer
264div = prim__sdivBigInt
340div = prim__sdivBigInt
lib/Prelude.idr+124
@@ -46,6 +46,118 @@ instance Show Bool where
46 show True = "True"
46 show True = "True"
47 show False = "False"
47 show False = "False"
48
48
49+instance Show Bits8 where
50+ show = prim__toStrB8
51+
52+instance Show Bits16 where
53+ show = prim__toStrB16
54+
55+instance Show Bits32 where
56+ show = prim__toStrB32
57+
58+instance Show Bits64 where
59+ show = prim__toStrB64
60+
61+%assert_total
62+viewB8x16 : Bits8x16 -> (Bits8, Bits8, Bits8, Bits8, Bits8, Bits8, Bits8, Bits8, Bits8, Bits8, Bits8, Bits8, Bits8, Bits8, Bits8, Bits8)
63+viewB8x16 x = ( prim__indexB8x16 x (prim__truncBigInt_B32 0)
64+ , prim__indexB8x16 x (prim__truncBigInt_B32 1)
65+ , prim__indexB8x16 x (prim__truncBigInt_B32 2)
66+ , prim__indexB8x16 x (prim__truncBigInt_B32 3)
67+ , prim__indexB8x16 x (prim__truncBigInt_B32 4)
68+ , prim__indexB8x16 x (prim__truncBigInt_B32 5)
69+ , prim__indexB8x16 x (prim__truncBigInt_B32 6)
70+ , prim__indexB8x16 x (prim__truncBigInt_B32 7)
71+ , prim__indexB8x16 x (prim__truncBigInt_B32 8)
72+ , prim__indexB8x16 x (prim__truncBigInt_B32 9)
73+ , prim__indexB8x16 x (prim__truncBigInt_B32 10)
74+ , prim__indexB8x16 x (prim__truncBigInt_B32 11)
75+ , prim__indexB8x16 x (prim__truncBigInt_B32 12)
76+ , prim__indexB8x16 x (prim__truncBigInt_B32 13)
77+ , prim__indexB8x16 x (prim__truncBigInt_B32 14)
78+ , prim__indexB8x16 x (prim__truncBigInt_B32 15)
79+ )
80+
81+instance Show Bits8x16 where
82+ show x =
83+ case viewB8x16 x of
84+ (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) =>
85+ "<" ++ prim__toStrB8 a
86+ ++ ", " ++ prim__toStrB8 b
87+ ++ ", " ++ prim__toStrB8 c
88+ ++ ", " ++ prim__toStrB8 d
89+ ++ ", " ++ prim__toStrB8 e
90+ ++ ", " ++ prim__toStrB8 f
91+ ++ ", " ++ prim__toStrB8 g
92+ ++ ", " ++ prim__toStrB8 h
93+ ++ ", " ++ prim__toStrB8 i
94+ ++ ", " ++ prim__toStrB8 j
95+ ++ ", " ++ prim__toStrB8 k
96+ ++ ", " ++ prim__toStrB8 l
97+ ++ ", " ++ prim__toStrB8 m
98+ ++ ", " ++ prim__toStrB8 n
99+ ++ ", " ++ prim__toStrB8 o
100+ ++ ", " ++ prim__toStrB8 p
101+ ++ ">"
102+
103+%assert_total
104+viewB16x8 : Bits16x8 -> (Bits16, Bits16, Bits16, Bits16, Bits16, Bits16, Bits16, Bits16)
105+viewB16x8 x = ( prim__indexB16x8 x (prim__truncBigInt_B32 0)
106+ , prim__indexB16x8 x (prim__truncBigInt_B32 1)
107+ , prim__indexB16x8 x (prim__truncBigInt_B32 2)
108+ , prim__indexB16x8 x (prim__truncBigInt_B32 3)
109+ , prim__indexB16x8 x (prim__truncBigInt_B32 4)
110+ , prim__indexB16x8 x (prim__truncBigInt_B32 5)
111+ , prim__indexB16x8 x (prim__truncBigInt_B32 6)
112+ , prim__indexB16x8 x (prim__truncBigInt_B32 7)
113+ )
114+
115+instance Show Bits16x8 where
116+ show x =
117+ case viewB16x8 x of
118+ (a, b, c, d, e, f, g, h) =>
119+ "<" ++ prim__toStrB16 a
120+ ++ ", " ++ prim__toStrB16 b
121+ ++ ", " ++ prim__toStrB16 c
122+ ++ ", " ++ prim__toStrB16 d
123+ ++ ", " ++ prim__toStrB16 e
124+ ++ ", " ++ prim__toStrB16 f
125+ ++ ", " ++ prim__toStrB16 g
126+ ++ ", " ++ prim__toStrB16 h
127+ ++ ">"
128+
129+%assert_total
130+viewB32x4 : Bits32x4 -> (Bits32, Bits32, Bits32, Bits32)
131+viewB32x4 x = ( prim__indexB32x4 x (prim__truncBigInt_B32 0)
132+ , prim__indexB32x4 x (prim__truncBigInt_B32 1)
133+ , prim__indexB32x4 x (prim__truncBigInt_B32 2)
134+ , prim__indexB32x4 x (prim__truncBigInt_B32 3)
135+ )
136+
137+instance Show Bits32x4 where
138+ show x =
139+ case viewB32x4 x of
140+ (a, b, c, d) =>
141+ "<" ++ prim__toStrB32 a
142+ ++ ", " ++ prim__toStrB32 b
143+ ++ ", " ++ prim__toStrB32 c
144+ ++ ", " ++ prim__toStrB32 d
145+ ++ ">"
146+
147+%assert_total
148+viewB64x2 : Bits64x2 -> (Bits64, Bits64)
149+viewB64x2 x = ( prim__indexB64x2 x (prim__truncBigInt_B32 0)
150+ , prim__indexB64x2 x (prim__truncBigInt_B32 1)
151+ )
152+
153+instance Show Bits64x2 where
154+ show x =
155+ case viewB64x2 x of
156+ (a, b) =>
157+ "<" ++ prim__toStrB64 a
158+ ++ ", " ++ prim__toStrB64 b
159+ ++ ">"
160+
49instance (Show a, Show b) => Show (a, b) where
161instance (Show a, Show b) => Show (a, b) where
50 show (x, y) = "(" ++ show x ++ ", " ++ show y ++ ")"
162 show (x, y) = "(" ++ show x ++ ", " ++ show y ++ ")"
51
163
@@ -228,6 +340,18 @@ curry f a b = f (a, b)
228uncurry : (a -> b -> c) -> (a, b) -> c
340uncurry : (a -> b -> c) -> (a, b) -> c
229uncurry f (a, b) = f a b
341uncurry f (a, b) = f a b
230
342
343+uniformB8x16 : Bits8 -> Bits8x16
344+uniformB8x16 x = prim__mkB8x16 x x x x x x x x x x x x x x x x
345+
346+uniformB16x8 : Bits16 -> Bits16x8
347+uniformB16x8 x = prim__mkB16x8 x x x x x x x x
348+
349+uniformB32x4 : Bits32 -> Bits32x4
350+uniformB32x4 x = prim__mkB32x4 x x x x
351+
352+uniformB64x2 : Bits64 -> Bits64x2
353+uniformB64x2 x = prim__mkB64x2 x x
354+
231---- some basic io
355---- some basic io
232
356
233partial
357partial