23 | import Derive.Prelude
25 | %language ElabReflection
28 | data DType = PRED | S8 | S16 | S32 | S64 | U8 | U16 | U32 | U64 | F64
30 | %runElab derive "DType" [Show, Eq]
33 | idrisType : DType -> Type
34 | idrisType PRED = Bool
36 | idrisType S16 = Int16
37 | idrisType S32 = Int32
38 | idrisType S64 = Int64
39 | idrisType U8 = Bits8
40 | idrisType U16 = Bits16
41 | idrisType U32 = Bits32
42 | idrisType U64 = Bits64
43 | idrisType F64 = Double
46 | data Num : DType -> Type where
58 | data Neg : DType -> Type where
66 | negNum : DType.Neg dtype -> Num dtype
67 | negNum NegS8 = NumS8
68 | negNum NegS16 = NumS16
69 | negNum NegS32 = NumS32
70 | negNum NegS64 = NumS64
71 | negNum NegF64 = NumF64
74 | data Abs : DType -> Type where
86 | absNum : DType.Abs dtype -> Num dtype
87 | absNum AbsS8 = NumS8
88 | absNum AbsS16 = NumS16
89 | absNum AbsS32 = NumS32
90 | absNum AbsS64 = NumS64
91 | absNum AbsU8 = NumU8
92 | absNum AbsU16 = NumU16
93 | absNum AbsU32 = NumU32
94 | absNum AbsU64 = NumU64
95 | absNum AbsF64 = NumF64
98 | data Integral : DType -> Type where
99 | IntegralS8 : Integral S8
100 | IntegralS16 : Integral S16
101 | IntegralS32 : Integral S32
102 | IntegralS64 : Integral S64
103 | IntegralU8 : Integral U8
104 | IntegralU16 : Integral U16
105 | IntegralU32 : Integral U32
106 | IntegralU64 : Integral U64
109 | integralNum : DType.Integral dtype -> Num dtype
110 | integralNum IntegralS8 = NumS8
111 | integralNum IntegralS16 = NumS16
112 | integralNum IntegralS32 = NumS32
113 | integralNum IntegralS64 = NumS64
114 | integralNum IntegralU8 = NumU8
115 | integralNum IntegralU16 = NumU16
116 | integralNum IntegralU32 = NumU32
117 | integralNum IntegralU64 = NumU64
120 | data Fractional : DType -> Type where
121 | FractionalF64 : Fractional F64
124 | fractionalNum : DType.Fractional dtype -> Num dtype
125 | fractionalNum FractionalF64 = NumF64
128 | data Ord : DType -> Type where