packages feed

bin 0.1.2 → 0.1.3

raw patch · 6 files changed

+138/−18 lines, 6 filesdep ~basedep ~deepseqdep ~finPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependency ranges changed: base, deepseq, fin, some

API changes (from Hackage documentation)

- Data.Bin: instance Data.Bits.Bits Data.Bin.Bin
- Data.BinP: instance Data.Bits.Bits Data.BinP.BinP
- Data.Wrd: instance Data.Type.Nat.SNatI n => Data.Bits.Bits (Data.Wrd.Wrd n)
- Data.Wrd: instance Data.Type.Nat.SNatI n => Data.Bits.FiniteBits (Data.Wrd.Wrd n)
+ Data.Bin: instance GHC.Bits.Bits Data.Bin.Bin
+ Data.Bin.Pos: instance Data.EqP.EqP @Data.Bin.Bin Data.Bin.Pos.Pos
+ Data.Bin.Pos: instance Data.GADT.Internal.GShow @Data.Bin.Bin Data.Bin.Pos.Pos
+ Data.Bin.Pos: instance Data.OrdP.OrdP @Data.Bin.Bin Data.Bin.Pos.Pos
+ Data.BinP: instance GHC.Bits.Bits Data.BinP.BinP
+ Data.BinP.PosP: instance Data.EqP.EqP @Data.BinP.BinP Data.BinP.PosP.PosP
+ Data.BinP.PosP: instance Data.GADT.Internal.GShow @Data.BinP.BinP Data.BinP.PosP.PosP
+ Data.BinP.PosP: instance Data.OrdP.OrdP @Data.BinP.BinP Data.BinP.PosP.PosP
+ Data.BinP.PosP: instance Data.Type.Nat.SNatI n => Data.GADT.Internal.GShow @Data.BinP.BinP (Data.BinP.PosP.PosP' n)
+ Data.Type.Bin: instance Data.EqP.EqP @Data.Bin.Bin Data.Type.Bin.SBin
+ Data.Type.Bin: instance GHC.Classes.Eq (Data.Type.Bin.SBin a)
+ Data.Type.Bin: instance GHC.Classes.Ord (Data.Type.Bin.SBin a)
+ Data.Type.BinP: instance Data.EqP.EqP @Data.BinP.BinP Data.Type.BinP.SBinP
+ Data.Type.BinP: instance GHC.Classes.Eq (Data.Type.BinP.SBinP a)
+ Data.Type.BinP: instance GHC.Classes.Ord (Data.Type.BinP.SBinP a)
+ Data.Wrd: instance Data.Type.Nat.SNatI n => GHC.Bits.Bits (Data.Wrd.Wrd n)
+ Data.Wrd: instance Data.Type.Nat.SNatI n => GHC.Bits.FiniteBits (Data.Wrd.Wrd n)

Files

ChangeLog.md view
@@ -1,5 +1,11 @@ # Version history for bin +## 0.1.3++- Add `EqP` and `OrdP` instances.+- Add `GShow Pos/P` instances.+- Better 'PosP.toNatural' implementation.+ ## 0.1.2  - Add `boring` instances
bin.cabal view
@@ -1,6 +1,6 @@ cabal-version:      2.2 name:               bin-version:            0.1.2+version:            0.1.3 synopsis:           Bin: binary natural numbers. category:           Data, Dependent Types, Singletons, Math description:@@ -41,9 +41,11 @@    || ==8.4.4    || ==8.6.5    || ==8.8.4-   || ==8.10.4-   || ==9.0.1-   || ==9.2.1+   || ==8.10.7+   || ==9.0.2+   || ==9.2.7+   || ==9.4.4+   || ==9.6.1  source-repository head   type:     git@@ -65,14 +67,14 @@    other-modules:    TrustworthyCompat   build-depends:-    , base        >=4.7     && <4.17+    , base        >=4.7     && <4.19     , boring      ^>=0.2     , dec         ^>=0.0.3     , deepseq     >=1.3.0.2 && <1.5-    , fin         ^>=0.2+    , fin         ^>=0.3     , hashable    >=1.2.7.0 && <1.5     , QuickCheck  ^>=2.14.2-    , some        ^>=1.0.3+    , some        ^>=1.0.4    if !impl(ghc >=7.10)     build-depends: nats ^>=1.1.2
src/Data/Bin/Pos.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE CPP                    #-} {-# LANGUAGE DataKinds              #-} {-# LANGUAGE DeriveDataTypeable     #-} {-# LANGUAGE EmptyCase              #-}@@ -29,15 +30,21 @@     ) where  import Prelude-       (Bounded (..), Eq, Int, Integer, Ord (..), Show (..), ShowS, String,-       fmap, fromIntegral, map, showParen, showString, ($), (.))+       (Bounded (..), Eq, Int, Integer, Ord (..), Show (..), ShowS, String, fmap, fromIntegral, map, showParen,+       showString, ($), (.))  import Control.DeepSeq (NFData (..)) import Data.Bin        (Bin (..), BinP (..)) import Data.BinP.PosP  (PosP (..))+import Data.GADT.Show  (GShow (..)) import Data.Typeable   (Typeable) import Numeric.Natural (Natural) +#if MIN_VERSION_some(1,0,5)+import Data.EqP  (EqP (..))+import Data.OrdP (OrdP (..))+#endif+ import qualified Data.BinP.PosP  as PP import qualified Data.Boring     as Boring import qualified Data.Type.Bin   as B@@ -47,9 +54,12 @@ import Data.Type.Bin  -- $setup--- >>> import Prelude (map, putStrLn, Ord (..), Bounded (..), ($), (.))+-- >>> import Prelude (map, putStrLn, Ord (..), Bounded (..), ($), (.), print) -- >>> import Data.Foldable (traverse_) -- >>> import Data.Type.Bin+-- >>> import Data.EqP (eqp)+-- >>> import Data.OrdP (comparep)+-- >>> :set -XTypeApplications  ------------------------------------------------------------------------------- -- Data@@ -72,6 +82,40 @@  instance Show (Pos b) where     showsPrec d = showsPrec d . toNatural++-- | @since 0.1.3+instance GShow Pos where+    gshowsPrec = showsPrec++#if MIN_VERSION_some(1,0,5)+-- |+--+-- >>> eqp (top :: Pos Bin4) (top :: Pos Bin6)+-- True+--+-- >>> let xs = universe @Bin4; ys = universe @Bin6 in traverse_ print [ [ eqp x y | y <- ys ] | x <- xs ]+-- [True,False,False,False,False,False]+-- [False,True,False,False,False,False]+-- [False,False,True,False,False,False]+-- [False,False,False,True,False,False]+--+-- @since 0.1.3+instance EqP Pos where+    eqp (Pos x) (Pos y) = eqp x y++-- |+--+-- >>> let xs = universe @Bin4; ys = universe @Bin6 in traverse_ print [ [ comparep x y | y <- ys ] | x <- xs ]+-- [EQ,LT,LT,LT,LT,LT]+-- [GT,EQ,LT,LT,LT,LT]+-- [GT,GT,EQ,LT,LT,LT]+-- [GT,GT,GT,EQ,LT,LT]+--+-- @since 0.1.3+--+instance OrdP Pos where+    comparep (Pos x) (Pos y) = comparep x y+#endif  -- | --
src/Data/BinP/PosP.hs view
@@ -1,3 +1,5 @@+{-# LANGUAGE CPP                    #-}+{-# LANGUAGE BangPatterns           #-} {-# LANGUAGE DataKinds              #-} {-# LANGUAGE DeriveDataTypeable     #-} {-# LANGUAGE EmptyCase              #-}@@ -31,18 +33,23 @@     ) where  import Prelude-       (Bounded (..), Either (..), Eq, Int, Integer, Num, Ord (..),-       Ordering (..), Show (..), ShowS, String, either, fmap, fromIntegral, map,-       showParen, showString, ($), (*), (+), (++), (.))+       (Bounded (..), Either (..), Eq (..), Int, Integer, Num, Ord (..), Ordering (..), Show (..), ShowS, String, either,+       fmap, fromIntegral, map, showParen, showString, ($), (*), (+), (++), (.))  import Control.DeepSeq (NFData (..)) import Data.Bin        (BinP (..))+import Data.GADT.Show  (GShow (..)) import Data.Nat        (Nat (..)) import Data.Proxy      (Proxy (..)) import Data.Typeable   (Typeable) import Data.Wrd        (Wrd (..)) import Numeric.Natural (Natural) +#if MIN_VERSION_some(1,0,5)+import Data.EqP  (EqP (..))+import Data.OrdP (OrdP (..))+#endif+ import qualified Data.Bin        as B import qualified Data.Boring     as Boring import qualified Data.Type.Bin   as B@@ -85,6 +92,20 @@     compare (There0 x) (There0 y) = compare x y  -------------------------------------------------------------------------------+-- some+-------------------------------------------------------------------------------++#if MIN_VERSION_some(1,0,5)+-- | @since 0.1.3+instance EqP PosP where+    eqp x y = toNatural x == toNatural y++-- | @since 0.1.3+instance OrdP PosP where+    comparep x y = compare (toNatural x) (toNatural y)+#endif++------------------------------------------------------------------------------- -- Instances ------------------------------------------------------------------------------- @@ -94,6 +115,14 @@ instance N.SNatI n => Show (PosP' n b) where     showsPrec d = showsPrec d . toNatural' +-- | @since 0.1.3+instance GShow PosP where+    gshowsPrec = showsPrec++-- | @since 0.1.3+instance N.SNatI n => GShow (PosP' n) where+    gshowsPrec = showsPrec+ instance SBinPI b => Bounded (PosP b) where     minBound = PosP minBound     maxBound = PosP maxBound@@ -201,14 +230,17 @@  -- | Convert 'PosP' to 'Natural'. toNatural :: PosP b -> Natural-toNatural (PosP p) = toNatural' p+toNatural (PosP p) = toNatural' p -- ' 0 1 p  -- | Convert 'PosP'' to 'Natural'. toNatural' :: forall n b. N.SNatI n => PosP' n b -> Natural-toNatural' (AtEnd v)  = W.toNatural v-toNatural' (Here v)   = W.toNatural v-toNatural' (There1 p) = getKNat (exp2 :: KNat Natural n) + toNatural' p-toNatural' (There0 p) = toNatural' p+toNatural' = toNatural'' 0 (getKNat (exp2 :: KNat Natural n))++toNatural'' :: Natural -> Natural -> PosP' n b -> Natural+toNatural'' !acc !_     (AtEnd v)  = acc + W.toNatural v+toNatural'' !acc !_     (Here v)   = acc + W.toNatural v+toNatural'' !acc !exp2n (There1 v) = toNatural'' (acc + exp2n) (2 * exp2n) v+toNatural'' !acc !exp2n (There0 v) = toNatural'' acc           (2 * exp2n) v  exp2 :: Num a => N.SNatI n => KNat a n exp2 = N.induction (KNat 1) (\(KNat n) -> KNat (n * 2))
src/Data/Type/Bin.hs view
@@ -63,6 +63,11 @@ import Data.Typeable     (Typeable) import Numeric.Natural   (Natural) +#if MIN_VERSION_some(1,0,5)+import Data.EqP          (EqP (..))+import Data.GADT.Compare (defaultEq)+#endif+ import qualified Data.Type.BinP as BP import qualified Data.Type.Nat  as N import qualified GHC.TypeLits   as GHC@@ -405,6 +410,19 @@ ------------------------------------------------------------------------------- -- some -------------------------------------------------------------------------------++-- | @since 0.1.3+instance Eq (SBin a) where+    _ == _ = True++-- | @since 0.1.3+instance Ord (SBin a) where+    compare _ _ = EQ++#if MIN_VERSION_some(1,0,5)+-- | @since 0.1.3+instance EqP SBin where eqp = defaultEq+#endif  -- | @since 0.1.2 instance GShow SBin where
src/Data/Type/BinP.hs view
@@ -58,6 +58,11 @@ import Data.Typeable     (Typeable) import Numeric.Natural   (Natural) +#if MIN_VERSION_some(1,0,5)+import Data.EqP          (EqP (..))+import Data.GADT.Compare (defaultEq)+#endif+ import qualified Data.Type.Nat as N import qualified GHC.TypeLits  as GHC @@ -281,6 +286,19 @@ ------------------------------------------------------------------------------- -- some -------------------------------------------------------------------------------++-- | @since 0.1.3+instance Eq (SBinP a) where+    _ == _ = True++-- | @since 0.1.3+instance Ord (SBinP a) where+    compare _ _ = EQ++#if MIN_VERSION_some(1,0,5)+-- | @since 0.1.3+instance EqP SBinP where eqp = defaultEq+#endif  -- | @since 0.1.2 instance GShow SBinP where