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 +6/−0
- bin.cabal +9/−7
- src/Data/Bin/Pos.hs +47/−3
- src/Data/BinP/PosP.hs +40/−8
- src/Data/Type/Bin.hs +18/−0
- src/Data/Type/BinP.hs +18/−0
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