singleton-nats 0.4.0.4 → 0.4.1
raw patch · 4 files changed
+46/−56 lines, 4 filesnew-uploaderPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
- Data.Nat: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings Data.Nat.Compare_6989586621679056907Sym0
- Data.Nat: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings Data.Nat.Compare_6989586621679056907Sym1
+ Data.Nat: LitSym0KindInference :: LitSym0
+ Data.Nat: data LitSym0 (l_allZ :: TyFun Nat Nat)
+ Data.Nat: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings Data.Nat.Abs_6989586621679057518Sym0
+ Data.Nat: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings Data.Nat.Compare_6989586621679057119Sym0
+ Data.Nat: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings Data.Nat.Compare_6989586621679057119Sym1
+ Data.Nat: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings Data.Nat.FromInteger_6989586621679057549Sym0
+ Data.Nat: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings Data.Nat.Let6989586621679057541Scrutinee_6989586621679049741Sym0
+ Data.Nat: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings Data.Nat.LitSym0
+ Data.Nat: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings Data.Nat.NatSignumSym0
+ Data.Nat: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings Data.Nat.Signum_6989586621679057531Sym0
+ Data.Nat: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings Data.Nat.TFHelper_6989586621679057449Sym0
+ Data.Nat: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings Data.Nat.TFHelper_6989586621679057449Sym1
+ Data.Nat: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings Data.Nat.TFHelper_6989586621679057475Sym0
+ Data.Nat: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings Data.Nat.TFHelper_6989586621679057475Sym1
+ Data.Nat: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings Data.Nat.TFHelper_6989586621679057501Sym0
+ Data.Nat: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings Data.Nat.TFHelper_6989586621679057501Sym1
+ Data.Nat: instance GHC.Num.Num Data.Nat.Nat
+ Data.Nat: natSignum :: Nat -> Nat
+ Data.Nat: someNatVal :: Integer -> Maybe (SomeSing Nat)
+ Data.Nat: type LitSym1 (t_allY :: Nat) = Lit t_allY
- Data.Nat: data SSym0 (l_abnq :: TyFun Nat Nat)
+ Data.Nat: data SSym0 (l_abqF :: TyFun Nat Nat)
- Data.Nat: type SSym1 (t_abnp :: Nat) = S t_abnp
+ Data.Nat: type SSym1 (t_abqE :: Nat) = S t_abqE
Files
- CHANGELOG.md +11/−0
- Data/Nat.hs +26/−53
- README.md +5/−0
- singleton-nats.cabal +4/−3
+ CHANGELOG.md view
@@ -0,0 +1,11 @@+# 0.4.1 [2018.05.02]+* Add a `Num Nat` instance.+* Implement `signum` in the `PNum`/`SNum` instances for `Nat`.+* Define defunctionalization symbols for `Lit`.+* Define `someNatVal`.++# 0.4.0.4 [2018.01.09]+* Allow `singletons-2.4`.++# 0.4.0.3 [2017.11.03]+* Allow `singletons-2.3`.
Data/Nat.hs view
@@ -11,24 +11,28 @@ , NatMul , NatMinus , NatAbs+ , NatSignum , natPlus , natMul , natMinus , natAbs+ , natSignum+ , someNatVal , SNat , Data.Singletons.Prelude.Sing(SS, SZ) , Data.Singletons.Prelude.PNum , Data.Singletons.Prelude.SNum , SSym0(..)- , SSym1(..)- , ZSym0(..)+ , SSym1+ , ZSym0 , Lit+ , LitSym0(..)+ , LitSym1 , SLit , sLit) where import Data.Singletons.TH import Data.Singletons.Prelude-import Unsafe.Coerce import qualified GHC.TypeLits as Lit $(singletons [d|@@ -39,16 +43,31 @@ natPlus (S a) b = S (natPlus a b) natMul :: Nat -> Nat -> Nat- natMul Z b = Z+ natMul Z _ = Z natMul (S a) b = natPlus b (natMul a b) natMinus :: Nat -> Nat -> Nat- natMinus Z b = Z+ natMinus Z _ = Z natMinus (S a) (S b) = natMinus a b natMinus a Z = a natAbs :: Nat -> Nat natAbs n = n++ natSignum :: Nat -> Nat+ natSignum Z = Z+ natSignum (S _) = S Z++ instance Num Nat where+ (+) = natPlus+ (-) = natMinus+ (*) = natMul+ abs = natAbs+ signum = natSignum+ fromInteger n+ = if n == 0+ then Z+ else S (fromInteger (n - 1)) |]) #if !(MIN_VERSION_singletons(2,4,0))@@ -61,58 +80,11 @@ instance Ord (SNat n) where compare _ _ = EQ -#if MIN_VERSION_singletons(2,3,0)-instance PNum Nat where-#else-instance PNum ('Proxy :: Proxy Nat) where-#endif-#if MIN_VERSION_singletons(2,4,0)- type a + b = NatPlus a b- type a - b = NatMinus a b- type a * b = NatMul a b-#else- type a :+ b = NatPlus a b- type a :- b = NatMinus a b- type a :* b = NatMul a b-#endif- type Abs a = NatAbs a- type Signum (a :: Nat) = Error "Data.Nat: signum not implemented"- type FromInteger (a :: Lit.Nat) = Lit a--instance SNum Nat where-#if MIN_VERSION_singletons(2,4,0)- (%+) = sNatPlus- (%*) = sNatMul- (%-) = sNatMinus-#else- (%:+) = sNatPlus- (%:*) = sNatMul- (%:-) = sNatMinus-#endif- sAbs = sNatAbs- sSignum = case toSing "Data.Nat: signum not implemented" of- SomeSing s -> sError s- sFromInteger n = case n -#if MIN_VERSION_singletons(2,4,0)- %==-#else- %:==-#endif- (sing :: Sing 0) of- STrue -> unsafeCoerce SZ- SFalse -> unsafeCoerce (SS (sFromInteger (n-#if MIN_VERSION_singletons(2,4,0)- %--#else- %:--#endif- (sing :: Sing 1))))- {-| Converts a runtime 'Integer' to an existentially wrapped 'Nat'. Returns 'Nothing' if the argument is negative -} someNatVal :: Integer -> Maybe (SomeSing Nat) someNatVal n = case Lit.someNatVal n of- Just (Lit.SomeNat (pn :: Proxy n)) -> Just (SomeSing (sFromInteger (sing :: Sing n)))+ Just (Lit.SomeNat (_ :: Proxy n)) -> Just (SomeSing (sFromInteger (sing :: Sing n))) Nothing -> Nothing {-| Provides a shorthand for 'Nat'-s using "GHC.TypeLits", for example:@@ -125,6 +97,7 @@ type family Lit n where Lit 0 = Z Lit n = S (Lit (n Lit.- 1))+$(genDefunSymbols [''Lit]) type SLit n = Sing (Lit n)
+ README.md view
@@ -0,0 +1,5 @@+# singleton-nats++[](https://hackage.haskell.org/package/singleton-nats) [](http://travis-ci.org/AndrasKovacs/singleton-nats)++Unary natural numbers relying on the singletons infrastructure.
singleton-nats.cabal view
@@ -1,6 +1,5 @@- name: singleton-nats-version: 0.4.0.4+version: 0.4.1 synopsis: Unary natural numbers relying on the singletons infrastructure. description: Unary natural number relying on the <https://hackage.haskell.org/package/singletons singletons> infrastructure. More information about the general usage of singletons can be found on the <https://github.com/goldfirere/singletons singletons github> page. category: Data, Dependent Types@@ -14,7 +13,8 @@ build-type: Simple cabal-version: >=1.10-tested-with: GHC == 8.0.1, GHC == 8.2.1, GHC == 8.4.1+tested-with: GHC == 8.0.2, GHC == 8.2.2, GHC == 8.4.2+extra-source-files: CHANGELOG.md, README.md source-repository head type: git@@ -29,3 +29,4 @@ singletons >= 2.2 && < 2.5 default-language: Haskell2010+ ghc-options: -Wall -Wno-unticked-promoted-constructors