@@ -1,26 +1,26 @@
1−module Literals.Number where
1+module Literals.Number
2+ ( FractionalPart
3+ , IntegerPart
4+ , NumberLit
5+ , Sign
6+ , class Number
7+ , class Number'
8+ , kind NumberPart
9+ , numberLit
10+ ) where
11+
12+import Prelude
213
314import Data.Maybe (fromJust)
415import Data.Number (fromString)
516import Data.Symbol (class IsSymbol, SProxy(..))
17+import Literals.Int (class Digit)
18+import Literals.Literal (Literal)
619import Partial.Unsafe (unsafePartial)
720import Prim.Symbol (class Cons)
821import Type.Prelude (reflectSymbol)
922import Unsafe.Coerce (unsafeCoerce)
1023
11−class Digit (s :: Symbol)
12−
13−instance digit0 :: Digit "0"
14−else instance digit1 :: Digit "1"
15−else instance digit2 :: Digit "2"
16−else instance digit3 :: Digit "3"
17−else instance digit4 :: Digit "4"
18−else instance digit5 :: Digit "5"
19−else instance digit6 :: Digit "6"
20−else instance digit7 :: Digit "7"
21−else instance digit8 :: Digit "8"
22−else instance digit9 :: Digit "9"
23−
2424class Number (sym :: Symbol)
2525
2626instance numberInstance :: (Number' h t Sign, Cons h t s) => Number s
@@ -35,16 +35,12 @@ class Number' (head :: Symbol) (tail :: Symbol) (part :: NumberPart)
3535instance signPart :: (Cons h' t' t, Number' h' t' IntegerPart) => Number' "-" t Sign
3636else instance signPartEmpty :: (Number' h t IntegerPart) => Number' h t Sign
3737else instance pointIntegerPart :: (Cons h' t' t, Number' h' t' FractionalPart) => Number' "." t IntegerPart
38−else instance lastIntegerPart :: (Digit h) => Number' h "" IntegerPart
39−else instance digitIntegerPart :: (Digit h, Cons h' t' t, Number' h' t' IntegerPart) => Number' h t IntegerPart
4038else instance lastFractionalPart :: (Digit h) => Number' h "" FractionalPart
39+else instance digitIntegerPart :: (Digit h, Cons h' t' t, Number' h' t' IntegerPart) => Number' h t IntegerPart
4140else instance digitFractionalPart :: (Digit h, Cons h' t' t, Number' h' t' FractionalPart) => Number' h t FractionalPart
4241
43−foreign import data Literal :: Symbol -> Type
44−
45−literal :: forall s. IsSymbol s => Number s => Literal s
46−literal = (unsafeCoerce (unsafePartial (fromJust (fromString (reflectSymbol (SProxy :: SProxy s))))))
42+type NumberLit sym = Literal Number sym
4743
48−toNumber :: forall s. Literal s -> Number
49−toNumber = unsafeCoerce
44+numberLit :: forall sym. IsSymbol sym => Number sym => NumberLit sym
45+numberLit = unsafeCoerce $ unsafePartial $ fromJust $ fromString $ reflectSymbol (SProxy :: SProxy sym)
5046