@@ -1,54 +0,0 @@
1−module Literals.Int
2− ( IntLit
3− , IntegerPart
4− , Sign
5− , class Digit
6− , class Int
7− , class Int'
8− , intLit
9− , IntPart
10− ) where
11−
12−import Prelude
13−
14−import Data.Int (fromString)
15−import Data.Maybe (fromJust)
16−import Data.Symbol (class IsSymbol)
17−import Literals.Literal (Literal)
18−import Partial.Unsafe (unsafePartial)
19−import Prim.Symbol (class Cons)
20−import Type.Prelude (reflectSymbol)
21−import Type.Proxy (Proxy(..))
22−import Unsafe.Coerce (unsafeCoerce)
23−
24−class Digit (s :: Symbol)
25−
26−instance digit0 :: Digit "0"
27−else instance digit1 :: Digit "1"
28−else instance digit2 :: Digit "2"
29−else instance digit3 :: Digit "3"
30−else instance digit4 :: Digit "4"
31−else instance digit5 :: Digit "5"
32−else instance digit6 :: Digit "6"
33−else instance digit7 :: Digit "7"
34−else instance digit8 :: Digit "8"
35−else instance digit9 :: Digit "9"
36−
37−data IntPart
38−foreign import data Sign :: IntPart
39−foreign import data IntegerPart :: IntPart
40−
41−class Int (sym :: Symbol)
42−instance intInstance :: (Int' h t Sign, Cons h t s) => Int s
43−
44−class Int' (head :: Symbol) (tail :: Symbol) (part :: IntPart)
45−
46−instance signPart :: (Cons h' t' t, Int' h' t' IntegerPart) => Int' "-" t Sign
47−else instance signPartEmpty :: (Int' h t IntegerPart) => Int' h t Sign
48−else instance lastIntegerPart :: (Digit h) => Int' h "" IntegerPart
49−else instance digitIntegerPart :: (Digit h, Cons h' t' t, Int' h' t' IntegerPart) => Int' h t IntegerPart
50−
51−type IntLit sym = Literal Int sym
52−
53−intLit :: forall sym. IsSymbol sym => Int sym => IntLit sym
54−intLit = unsafeCoerce $ unsafePartial $ fromJust $ fromString $ reflectSymbol (Proxy :: Proxy sym)