packages feed

singleton-nats 0.3.1.0 → 0.4.0.0

raw patch · 2 files changed

+70/−52 lines, 2 filesdep ~singletonsPVP ok

version bump matches the API change (PVP)

Dependency ranges changed: singletons

API changes (from Hackage documentation)

- Data.Nat: (%:*) :: Sing t_a6Ir -> Sing t_a6Is -> Sing (Apply (Apply (:*$) t_a6Ir) t_a6Is)
- Data.Nat: (%:+) :: Sing t_a6Ip -> Sing t_a6Iq -> Sing (Apply (Apply (:+$) t_a6Ip) t_a6Iq)
- Data.Nat: data (:+$$) (l_a6I6 :: Nat) (l_a6I5 :: TyFun Nat Nat)
- Data.Nat: instance Eq Nat
- Data.Nat: instance Ord Nat
- Data.Nat: instance PEq 'KProxy
- Data.Nat: instance POrd 'KProxy
- Data.Nat: instance SDecide 'KProxy
- Data.Nat: instance SEq 'KProxy
- Data.Nat: instance Show Nat
- Data.Nat: instance SingI 'Z
- Data.Nat: instance SingI n0 => SingI ('S n0)
- Data.Nat: instance SingKind 'KProxy
- Data.Nat: instance SuppressUnusedWarnings (:*$$)
- Data.Nat: instance SuppressUnusedWarnings (:*$)
- Data.Nat: instance SuppressUnusedWarnings (:+$$)
- Data.Nat: instance SuppressUnusedWarnings (:+$)
- Data.Nat: instance SuppressUnusedWarnings SSym0
+ Data.Nat: class (~) (KProxy a0) kproxy0 (KProxy a0) => PNum (kproxy0 :: KProxy a0)
+ Data.Nat: class (~) (KProxy a0) kproxy0 (KProxy a0) => SNum (kproxy0 :: KProxy a0)
+ Data.Nat: instance Data.Singletons.Decide.SDecide 'Data.Proxy.KProxy
+ Data.Nat: instance Data.Singletons.Prelude.Eq.PEq 'Data.Proxy.KProxy
+ Data.Nat: instance Data.Singletons.Prelude.Eq.SEq 'Data.Proxy.KProxy
+ Data.Nat: instance Data.Singletons.Prelude.Num.PNum 'Data.Proxy.KProxy
+ Data.Nat: instance Data.Singletons.Prelude.Num.SNum 'Data.Proxy.KProxy
+ Data.Nat: instance Data.Singletons.Prelude.Ord.POrd 'Data.Proxy.KProxy
+ Data.Nat: instance Data.Singletons.Prelude.Ord.SOrd 'Data.Proxy.KProxy => Data.Singletons.Prelude.Ord.SOrd 'Data.Proxy.KProxy
+ Data.Nat: instance Data.Singletons.SingI 'Data.Nat.Z
+ Data.Nat: instance Data.Singletons.SingI n0 => Data.Singletons.SingI ('Data.Nat.S n0)
+ Data.Nat: instance Data.Singletons.SingKind 'Data.Proxy.KProxy
+ Data.Nat: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings Data.Nat.Compare_1627420094Sym0
+ Data.Nat: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings Data.Nat.Compare_1627420094Sym1
+ Data.Nat: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings Data.Nat.NatAbsSym0
+ Data.Nat: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings Data.Nat.NatMinusSym0
+ Data.Nat: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings Data.Nat.NatMinusSym1
+ Data.Nat: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings Data.Nat.NatMulSym0
+ Data.Nat: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings Data.Nat.NatMulSym1
+ Data.Nat: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings Data.Nat.NatPlusSym0
+ Data.Nat: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings Data.Nat.NatPlusSym1
+ Data.Nat: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings Data.Nat.SSym0
+ Data.Nat: instance GHC.Classes.Eq Data.Nat.Nat
+ Data.Nat: instance GHC.Classes.Ord Data.Nat.Nat
+ Data.Nat: instance GHC.Show.Show Data.Nat.Nat
+ Data.Nat: natAbs :: Nat -> Nat
+ Data.Nat: natMinus :: Nat -> Nat -> Nat
- Data.Nat: data SSym0 (l_a6HZ :: TyFun Nat Nat)
+ Data.Nat: data SSym0 (l_a7fQ :: TyFun Nat Nat)
- Data.Nat: type SNat (z_a6ID :: Nat) = Sing z_a6ID
+ Data.Nat: type SNat = (Sing :: Nat -> *)
- Data.Nat: type SSym1 (t_a6HY :: Nat) = S t_a6HY
+ Data.Nat: type SSym1 (t_a7fP :: Nat) = S t_a7fP

Files

Data/Nat.hs view
@@ -1,60 +1,78 @@ {-# LANGUAGE   UndecidableInstances, ScopedTypeVariables, DataKinds,   FlexibleInstances, GADTs, TypeFamilies, TemplateHaskell,-  TypeOperators #-}+  InstanceSigs, TypeOperators, PolyKinds #-}  module Data.Nat (     Nat(..)+  , NatPlus+  , NatMul+  , NatMinus+  , NatAbs   , natPlus   , natMul+  , natMinus+  , natAbs   , SNat-  , Data.Singletons.Prelude.Sing(SS, SZ)    -  , (:*)-  , (:*$)-  , (:*$$)-  , (:+)    -  , (:+$)-  , (:+$$)+  , Data.Singletons.Prelude.Sing(SS, SZ)+  , Data.Singletons.Prelude.PNum+  , Data.Singletons.Prelude.SNum       , SSym0(..)   , SSym1(..)   , ZSym0(..)-  , (%:+)-  , (%:*)   , Lit   , SLit ) where  import Data.Singletons.TH import Data.Singletons.Prelude-import qualified GHC.TypeLits as Lit+import Unsafe.Coerce+import qualified GHC.TypeLits as Lit    $(singletons [d|   data Nat = Z | S Nat deriving (Eq, Show, Ord) -  (+) :: Nat -> Nat -> Nat-  Z + b = b-  S a + b = S (a + b)+  natPlus :: Nat -> Nat -> Nat+  natPlus Z     b = b+  natPlus (S a) b = S (natPlus a b) -  (*) :: Nat -> Nat -> Nat-  Z * b = Z-  S a * b = b + (a * b) |])+  natMul :: Nat -> Nat -> Nat+  natMul Z     b = Z+  natMul (S a) b = natPlus b (natMul a b) -{-| This is the plain value-level version of addition on Nats. There's rarely a reason to use this;-it's included for completeness. -}-natPlus :: Nat -> Nat -> Nat-natPlus = (Data.Nat.+)+  natMinus :: Nat -> Nat -> Nat+  natMinus Z     b     = Z+  natMinus (S a) (S b) = natMinus a b+  natMinus a     Z     = a -{-| Similarly to 'natPlus', this one is included for completeness. -}-natMul :: Nat -> Nat -> Nat-natMul = (Data.Nat.*)+  natAbs :: Nat -> Nat+  natAbs n = n+  |])                                 +instance PNum ('KProxy :: KProxy Nat) where+  type a :+ b = NatPlus a b+  type a :- b = NatMinus a b+  type a :* b = NatMul a b+  type Abs a = NatAbs a+  type Signum (a :: Nat) = Error "Data.Nat: signum not implemented"+  type FromInteger (a :: Lit.Nat) = Lit a++instance SNum ('KProxy :: KProxy Nat) where  +  (%:+) = sNatPlus+  (%:*) = sNatMul+  (%:-) = sNatMinus+  sAbs  = sNatAbs  +  sSignum = case toSing "Data.Nat: signum not implemented" of+    SomeSing s -> sError s    +  sFromInteger n = case n %:== (sing :: Sing 0) of+    STrue  -> unsafeCoerce SZ+    SFalse -> unsafeCoerce (SS (sFromInteger (n %:- (sing :: Sing 1))))+ {-| Converts a runtime 'Integer' to an existentially wrapped 'Nat'. Returns 'Nothing' if the argument is negative -}-someNat :: Integer -> Maybe (SomeSing (KindOf Z))-someNat n | n < 0 = Nothing-someNat n = Just (go n) where  -  go 0 = SomeSing SZ-  go n = case go (n - 1) of-    SomeSing sn -> SomeSing (SS sn)+someNatVal :: Integer -> Maybe (SomeSing (KindOf Z))+someNatVal n = case Lit.someNatVal n of+  Just (Lit.SomeNat (pn :: Proxy n)) -> Just (SomeSing (sFromInteger (sing :: Sing n)))+  Nothing -> Nothing  {-| Provides a shorthand for 'Nat'-s using "GHC.TypeLits", for example: 
singleton-nats.cabal view
@@ -1,23 +1,23 @@--name:                singleton-nats-version:             0.3.1.0-synopsis:            Unary natural numbers relying on the singletons infrastructure.         -license:             BSD3-license-file:        LICENSE-author:              András Kovács-maintainer:          puttamalac@gmail.com-copyright:           2015 András Kovács-category:            Data-build-type:          Simple--cabal-version:       >=1.10--library-  exposed-modules:-    Data.Nat--  build-depends:       -    base >=4.7 && <4.9,-    singletons >= 1-+
+name:                singleton-nats
+version:             0.4.0.0
+synopsis:            Unary natural numbers relying on the singletons infrastructure.         
+license:             BSD3
+license-file:        LICENSE
+author:              András Kovács
+maintainer:          puttamalac@gmail.com
+copyright:           2015 András Kovács
+category:            Data
+build-type:          Simple
+
+cabal-version:       >=1.10
+
+library
+  exposed-modules:
+    Data.Nat
+
+  build-depends:       
+    base >=4.7 && <4.9,
+    singletons >= 2.0.1
+
   default-language:    Haskell2010