packages feed

bin 0.1 → 0.1.1

raw patch · 10 files changed

+102/−41 lines, 10 filesdep ~QuickCheckdep ~basedep ~finPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependency ranges changed: QuickCheck, base, fin

API changes (from Hackage documentation)

- Data.Bin.Pos: instance (Data.Type.BinP.SBinPI n, (b :: Data.Bin.Bin) Data.Type.Equality.~ ('Data.Bin.BP n :: Data.Bin.Bin)) => GHC.Enum.Bounded (Data.Bin.Pos.Pos b)
- Data.Bin.Pos: instance (Data.Type.BinP.SBinPI n, (b :: Data.Bin.Bin) Data.Type.Equality.~ ('Data.Bin.BP n :: Data.Bin.Bin)) => Test.QuickCheck.Arbitrary.Arbitrary (Data.Bin.Pos.Pos b)
- Data.Bin.Pos: instance (Data.Type.BinP.SBinPI n, (b :: Data.Bin.Bin) Data.Type.Equality.~ ('Data.Bin.BP n :: Data.Bin.Bin)) => Test.QuickCheck.Function.Function (Data.Bin.Pos.Pos b)
- Data.Type.Bin: instance Data.Type.Equality.TestEquality Data.Bin.Bin Data.Type.Bin.SBin
- Data.Type.BinP: instance Data.Type.Equality.TestEquality Data.BinP.BinP Data.Type.BinP.SBinP
+ Data.Bin.Pos: instance (Data.Type.BinP.SBinPI n, (b :: Data.Bin.Bin) GHC.Types.~ ('Data.Bin.BP n :: Data.Bin.Bin)) => GHC.Enum.Bounded (Data.Bin.Pos.Pos b)
+ Data.Bin.Pos: instance (Data.Type.BinP.SBinPI n, (b :: Data.Bin.Bin) GHC.Types.~ ('Data.Bin.BP n :: Data.Bin.Bin)) => Test.QuickCheck.Arbitrary.Arbitrary (Data.Bin.Pos.Pos b)
+ Data.Bin.Pos: instance (Data.Type.BinP.SBinPI n, (b :: Data.Bin.Bin) GHC.Types.~ ('Data.Bin.BP n :: Data.Bin.Bin)) => Test.QuickCheck.Function.Function (Data.Bin.Pos.Pos b)
+ Data.Type.Bin: instance Data.Type.Equality.TestEquality @{Data.Bin.Bin} Data.Type.Bin.SBin
+ Data.Type.BinP: instance Data.Type.Equality.TestEquality @{Data.BinP.BinP} Data.Type.BinP.SBinP
- Data.Bin.Pos: [Pos] :: PosP b -> Pos ( 'BP b)
+ Data.Bin.Pos: [Pos] :: PosP b -> Pos ('BP b)
- Data.Bin.Pos: absurd :: Pos 'BZ -> b
+ Data.Bin.Pos: absurd :: Pos 'BZ -> b
- Data.Bin.Pos: boring :: Pos ( 'BP 'BE)
+ Data.Bin.Pos: boring :: Pos ('BP 'BE)
- Data.Bin.Pos: pop :: (SBinPI a, Pred b ~ 'BP a, Succ a ~ b) => Pos ( 'BP a) -> Pos ( 'BP b)
+ Data.Bin.Pos: pop :: (SBinPI a, Pred b ~ 'BP a, Succ a ~ b) => Pos ('BP a) -> Pos ('BP b)
- Data.Bin.Pos: top :: SBinPI b => Pos ( 'BP b)
+ Data.Bin.Pos: top :: SBinPI b => Pos ('BP b)
- Data.Bin.Pos: weakenRight1 :: SBinPI b => Pos ( 'BP b) -> Pos (Succ'' b)
+ Data.Bin.Pos: weakenRight1 :: SBinPI b => Pos ('BP b) -> Pos (Succ'' b)
- Data.BinP.PosP: PosP :: PosP' 'Z b -> PosP
+ Data.BinP.PosP: PosP :: PosP' 'Z b -> PosP (b :: BinP)
- Data.BinP.PosP: [AtEnd] :: Wrd n -> PosP' n 'BE
+ Data.BinP.PosP: [AtEnd] :: Wrd n -> PosP' n 'BE
- Data.BinP.PosP: [Here] :: Wrd n -> PosP' n ( 'B1 b)
+ Data.BinP.PosP: [Here] :: Wrd n -> PosP' n ('B1 b)
- Data.BinP.PosP: [There0] :: PosP' ( 'S n) b -> PosP' n ( 'B0 b)
+ Data.BinP.PosP: [There0] :: PosP' ('S n) b -> PosP' n ('B0 b)
- Data.BinP.PosP: [There1] :: PosP' ( 'S n) b -> PosP' n ( 'B1 b)
+ Data.BinP.PosP: [There1] :: PosP' ('S n) b -> PosP' n ('B1 b)
- Data.BinP.PosP: [unPosP] :: PosP -> PosP' 'Z b
+ Data.BinP.PosP: [unPosP] :: PosP (b :: BinP) -> PosP' 'Z b
- Data.BinP.PosP: boring :: PosP 'BE
+ Data.BinP.PosP: boring :: PosP 'BE
- Data.BinP.PosP: pop :: (SBinPI a, Pred b ~ 'BP a, Succ a ~ b) => PosP a -> PosP b
+ Data.BinP.PosP: pop :: (SBinPI a, Pred b ~ 'BP a, Succ a ~ b) => PosP a -> PosP b
- Data.Type.Bin: [SB0] :: SBinPI b => SBinP ( 'B0 b)
+ Data.Type.Bin: [SB0] :: SBinPI b => SBinP ('B0 b)
- Data.Type.Bin: [SB1] :: SBinPI b => SBinP ( 'B1 b)
+ Data.Type.Bin: [SB1] :: SBinPI b => SBinP ('B1 b)
- Data.Type.Bin: [SBE] :: SBinP 'BE
+ Data.Type.Bin: [SBE] :: SBinP 'BE
- Data.Type.Bin: [SBP] :: SBinPI b => SBin ( 'BP b)
+ Data.Type.Bin: [SBP] :: SBinPI b => SBin ('BP b)
- Data.Type.Bin: [SBZ] :: SBin 'BZ
+ Data.Type.Bin: [SBZ] :: SBin 'BZ
- Data.Type.Bin: induction :: forall b f. SBinI b => f 'BZ -> f ( 'BP 'BE) -> (forall bb. SBinPI bb => f ( 'BP bb) -> f ( 'BP ( 'B0 bb))) -> (forall bb. SBinPI bb => f ( 'BP bb) -> f ( 'BP ( 'B1 bb))) -> f b
+ Data.Type.Bin: induction :: forall b f. SBinI b => f 'BZ -> f ('BP 'BE) -> (forall bb. SBinPI bb => f ('BP bb) -> f ('BP ('B0 bb))) -> (forall bb. SBinPI bb => f ('BP bb) -> f ('BP ('B1 bb))) -> f b
- Data.Type.Bin: type Bin0 = 'BZ
+ Data.Type.Bin: type Bin0 = 'BZ
- Data.Type.Bin: type Bin1 = 'BP BinP1
+ Data.Type.Bin: type Bin1 = 'BP BinP1
- Data.Type.Bin: type Bin2 = 'BP BinP2
+ Data.Type.Bin: type Bin2 = 'BP BinP2
- Data.Type.Bin: type Bin3 = 'BP BinP3
+ Data.Type.Bin: type Bin3 = 'BP BinP3
- Data.Type.Bin: type Bin4 = 'BP BinP4
+ Data.Type.Bin: type Bin4 = 'BP BinP4
- Data.Type.Bin: type Bin5 = 'BP BinP5
+ Data.Type.Bin: type Bin5 = 'BP BinP5
- Data.Type.Bin: type Bin6 = 'BP BinP6
+ Data.Type.Bin: type Bin6 = 'BP BinP6
- Data.Type.Bin: type Bin7 = 'BP BinP7
+ Data.Type.Bin: type Bin7 = 'BP BinP7
- Data.Type.Bin: type Bin8 = 'BP BinP8
+ Data.Type.Bin: type Bin8 = 'BP BinP8
- Data.Type.Bin: type Bin9 = 'BP BinP9
+ Data.Type.Bin: type Bin9 = 'BP BinP9
- Data.Type.Bin: type Succ b = 'BP (Succ' b)
+ Data.Type.Bin: type Succ b = 'BP (Succ' b)
- Data.Type.Bin: type Succ'' b = 'BP (Succ b)
+ Data.Type.Bin: type Succ'' b = 'BP (Succ b)
- Data.Type.BinP: [SB0] :: SBinPI b => SBinP ( 'B0 b)
+ Data.Type.BinP: [SB0] :: SBinPI b => SBinP ('B0 b)
- Data.Type.BinP: [SB1] :: SBinPI b => SBinP ( 'B1 b)
+ Data.Type.BinP: [SB1] :: SBinPI b => SBinP ('B1 b)
- Data.Type.BinP: [SBE] :: SBinP 'BE
+ Data.Type.BinP: [SBE] :: SBinP 'BE
- Data.Type.BinP: induction :: forall b f. SBinPI b => f 'BE -> (forall bb. SBinPI bb => f bb -> f ( 'B0 bb)) -> (forall bb. SBinPI bb => f bb -> f ( 'B1 bb)) -> f b
+ Data.Type.BinP: induction :: forall b f. SBinPI b => f 'BE -> (forall bb. SBinPI bb => f bb -> f ('B0 bb)) -> (forall bb. SBinPI bb => f bb -> f ('B1 bb)) -> f b
- Data.Type.BinP: type BinP1 = 'BE
+ Data.Type.BinP: type BinP1 = 'BE
- Data.Type.BinP: type BinP2 = 'B0 BinP1
+ Data.Type.BinP: type BinP2 = 'B0 BinP1
- Data.Type.BinP: type BinP3 = 'B1 BinP1
+ Data.Type.BinP: type BinP3 = 'B1 BinP1
- Data.Type.BinP: type BinP4 = 'B0 BinP2
+ Data.Type.BinP: type BinP4 = 'B0 BinP2
- Data.Type.BinP: type BinP5 = 'B1 BinP2
+ Data.Type.BinP: type BinP5 = 'B1 BinP2
- Data.Type.BinP: type BinP6 = 'B0 BinP3
+ Data.Type.BinP: type BinP6 = 'B0 BinP3
- Data.Type.BinP: type BinP7 = 'B1 BinP3
+ Data.Type.BinP: type BinP7 = 'B1 BinP3
- Data.Type.BinP: type BinP8 = 'B0 BinP4
+ Data.Type.BinP: type BinP8 = 'B0 BinP4
- Data.Type.BinP: type BinP9 = 'B1 BinP4
+ Data.Type.BinP: type BinP9 = 'B1 BinP4
- Data.Wrd: [W0] :: Wrd n -> Wrd ( 'S n)
+ Data.Wrd: [W0] :: Wrd n -> Wrd ('S n)
- Data.Wrd: [W1] :: Wrd n -> Wrd ( 'S n)
+ Data.Wrd: [W1] :: Wrd n -> Wrd ('S n)
- Data.Wrd: [WE] :: Wrd 'Z
+ Data.Wrd: [WE] :: Wrd 'Z

Files

ChangeLog.md view
@@ -1,5 +1,10 @@ # Version history for bin +## 0.1.1++- Explicitly mark all modules as Safe or Trustworthy.+- `fin-0.2` support.+ ## 0.1  - First version. Released on an unsuspecting world.
bin.cabal view
@@ -1,6 +1,6 @@ cabal-version:      2.2 name:               bin-version:            0.1+version:            0.1.1 synopsis:           Bin: binary natural numbers. category:           Data, Dependent Types, Singletons, Math description:@@ -30,7 +30,7 @@ license-file:       LICENSE author:             Oleg Grenrus <oleg.grenrus@iki.fi> maintainer:         Oleg.Grenrus <oleg.grenrus@iki.fi>-copyright:          (c) 2019 Oleg Grenrus+copyright:          (c) 2019-2021 Oleg Grenrus build-type:         Simple extra-source-files: ChangeLog.md tested-with:@@ -40,7 +40,9 @@    || ==8.2.2    || ==8.4.4    || ==8.6.5-   || ==8.8.1+   || ==8.8.4+   || ==8.10.4+   || ==9.0.1  source-repository head   type:     git@@ -60,16 +62,22 @@     Data.Type.BinP     Data.Wrd +  other-modules:    TrustworthyCompat   build-depends:-    , base        >=4.7     && <4.14+    , base        >=4.7     && <4.16     , dec         ^>=0.0.3     , deepseq     >=1.3.0.2 && <1.5-    , fin         ^>=0.1.1+    , fin         ^>=0.2     , hashable    >=1.2.7.0 && <1.4-    , QuickCheck  ^>=2.13.2+    , QuickCheck  ^>=2.14.2    if !impl(ghc >=7.10)     build-depends: nats ^>=1.1.2++  if impl(ghc >= 9.0)+    -- these flags may abort compilation with GHC-8.10+    -- https://gitlab.haskell.org/ghc/ghc/-/merge_requests/3295+    ghc-options: -Winferred-safe-imports -Wmissing-safe-haskell-mode  -- dump-core -- if impl(ghc >= 8.0)
src/Data/Bin.hs view
@@ -1,5 +1,6 @@ {-# LANGUAGE CPP                #-} {-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE Safe               #-}  #if __GLASGOW_HASKELL__ < 710 {-# LANGUAGE DataKinds          #-}@@ -36,6 +37,7 @@     ) where  import Control.DeepSeq (NFData (..))+import Data.BinP       (BinP (..)) import Data.Bits       (Bits (..)) import Data.Data       (Data) import Data.Hashable   (Hashable (..))@@ -43,11 +45,13 @@ import Data.Typeable   (Typeable) import GHC.Exception   (ArithException (..), throw) import Numeric.Natural (Natural)-import Data.BinP (BinP (..)) +import qualified Data.BinP       as BP import qualified Data.Nat        as N import qualified Test.QuickCheck as QC-import qualified Data.BinP as BP++-- $setup+-- >>> import qualified Data.Nat as N  ------------------------------------------------------------------------------- -- Bin
src/Data/Bin/Pos.hs view
@@ -6,6 +6,7 @@ {-# LANGUAGE FunctionalDependencies #-} {-# LANGUAGE GADTs                  #-} {-# LANGUAGE KindSignatures         #-}+{-# LANGUAGE Safe                   #-} {-# LANGUAGE ScopedTypeVariables    #-} {-# LANGUAGE StandaloneDeriving     #-} {-# LANGUAGE UndecidableInstances   #-}@@ -38,14 +39,15 @@  import qualified Data.BinP.PosP  as PP import qualified Data.Type.Bin   as B-import qualified Data.Type.BinP   as BP+import qualified Data.Type.BinP  as BP import qualified Test.QuickCheck as QC  import Data.Type.Bin  -- $setup--- >>> import Prelude (map, putStrLn)+-- >>> import Prelude (map, putStrLn, Ord (..), Bounded (..), ($), (.)) -- >>> import Data.Foldable (traverse_)+-- >>> import Data.Type.Bin  ------------------------------------------------------------------------------- -- Data@@ -53,7 +55,7 @@  -- | 'Pos' is to 'Bin' is what 'Fin' is to 'Nat'. ----- The name is picked, as sthe lack of beter alternatives.+-- The name is picked, as the lack of better alternatives. -- data Pos (b :: Bin) where     Pos :: PosP b -> Pos ('BP b)
src/Data/BinP.hs view
@@ -1,6 +1,7 @@ {-# LANGUAGE BangPatterns       #-} {-# LANGUAGE CPP                #-} {-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE Safe               #-}  #if __GLASGOW_HASKELL__ < 710 {-# LANGUAGE DataKinds          #-}@@ -66,17 +67,26 @@ deriving instance Typeable 'B1 #endif --- | >>> sort [1 .. 9 :: BinP]+-- |+--+-- >>> sort [ 1 .. 9 :: BinP ] -- [1,2,3,4,5,6,7,8,9] --+-- >>> sort $ reverse [ 1 .. 9 :: BinP ]+-- [1,2,3,4,5,6,7,8,9]+--+-- >>> sort $ [ 1 .. 9 ] ++ [ 1 .. 9 :: BinP ]+-- [1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9]+-- instance Ord BinP where-    compare BE     BE     = EQ-    compare BE     _      = LT-    compare _      BE     = GT-    compare (B0 a) (B0 b) = compare a b-    compare (B1 a) (B1 b) = compare a b-    compare (B0 a) (B1 b) = compare a b `mappend` LT-    compare (B1 a) (B0 b) = compare a b `mappend` GT+    compare = go EQ where+        go  acc BE     BE     = acc+        go _acc BE     _      = LT+        go _acc _      BE     = GT+        go  acc (B0 a) (B0 b) = go acc a b+        go  acc (B1 a) (B1 b) = go acc a b+        go _acc (B0 a) (B1 b) = go LT  a b+        go _acc (B1 a) (B0 b) = go GT  a b  instance Show BinP where     showsPrec d = showsPrec d . toNatural
src/Data/BinP/PosP.hs view
@@ -6,6 +6,7 @@ {-# LANGUAGE FunctionalDependencies #-} {-# LANGUAGE GADTs                  #-} {-# LANGUAGE KindSignatures         #-}+{-# LANGUAGE Safe                   #-} {-# LANGUAGE ScopedTypeVariables    #-} {-# LANGUAGE StandaloneDeriving     #-} {-# LANGUAGE UndecidableInstances   #-}@@ -31,8 +32,8 @@  import Prelude        (Bounded (..), Either (..), Eq, Int, Integer, Num, Ord (..),-       Ordering (..), Show (..), ShowS, String, either, fmap, fromIntegral,-       map, showParen, showString, ($), (*), (+), (++), (.))+       Ordering (..), Show (..), ShowS, String, either, fmap, fromIntegral, map,+       showParen, showString, ($), (*), (+), (++), (.))  import Data.Bin        (BinP (..)) import Data.Nat        (Nat (..))@@ -53,6 +54,8 @@ -- $setup -- >>> import Prelude (map, putStrLn) -- >>> import Data.Foldable (traverse_)+-- >>> import qualified Data.Type.Nat as N+-- >>> import Data.Type.BinP  ------------------------------------------------------------------------------- -- Data
src/Data/Type/Bin.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE CPP                  #-} {-# LANGUAGE DataKinds            #-} {-# LANGUAGE DeriveDataTypeable   #-} {-# LANGUAGE FlexibleContexts     #-}@@ -8,6 +9,11 @@ {-# LANGUAGE TypeFamilies         #-} {-# LANGUAGE TypeOperators        #-} {-# LANGUAGE UndecidableInstances #-}+#if MIN_VERSION_base(4,8,0)+{-# LANGUAGE Safe                 #-}+#else+{-# LANGUAGE Trustworthy          #-}+#endif -- | Binary natural numbers. @DataKinds@ stuff. module Data.Type.Bin (     -- * Singleton@@ -43,22 +49,27 @@     Bin0, Bin1, Bin2, Bin3, Bin4, Bin5, Bin6, Bin7, Bin8, Bin9,     ) where -import Data.Bin           (Bin (..), BinP (..))-import Data.Nat           (Nat (..))-import Data.Proxy         (Proxy (..))-import Data.Type.Equality ((:~:) (..), TestEquality (..))-import Data.Typeable      (Typeable)-import Numeric.Natural    (Natural)-import Data.Type.BinP (SBinP (..), SBinPI (..))+import Data.Bin        (Bin (..), BinP (..))+import Data.Nat        (Nat (..))+import Data.Proxy      (Proxy (..))+import Data.Type.BinP  (SBinP (..), SBinPI (..))+import Data.Typeable   (Typeable)+import Numeric.Natural (Natural) -import qualified Data.Type.Nat as N-import qualified GHC.TypeLits  as GHC import qualified Data.Type.BinP as BP+import qualified Data.Type.Nat  as N+import qualified GHC.TypeLits   as GHC +import TrustworthyCompat+ -- $setup -- >>> :set -XDataKinds -- >>> import Data.Bin -- >>> import Data.Type.BinP (BinP2, BinP3)+-- >>> import Data.Nat (Nat (..))+-- >>> import qualified Data.Type.BinP as BP+-- >>> import qualified Data.Type.Nat as N+-- >>> import qualified GHC.TypeLits as GHC  ------------------------------------------------------------------------------- -- Singletons@@ -288,7 +299,7 @@ -- >>> :kind! Succ Bin5 -- Succ Bin5 :: Bin -- = 'BP ('B0 ('B1 'BE))--- +-- -- @ -- `Succ`   :: 'Bin' -> 'Bin' -- `Succ'`  :: 'Bin' -> 'BinP'
src/Data/Type/BinP.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE CPP                  #-} {-# LANGUAGE DataKinds            #-} {-# LANGUAGE DeriveDataTypeable   #-} {-# LANGUAGE FlexibleContexts     #-}@@ -8,6 +9,11 @@ {-# LANGUAGE TypeFamilies         #-} {-# LANGUAGE TypeOperators        #-} {-# LANGUAGE UndecidableInstances #-}+#if MIN_VERSION_base(4,8,0)+{-# LANGUAGE Safe                 #-}+#else+{-# LANGUAGE Trustworthy          #-}+#endif -- | Positive binary natural numbers. @DataKinds@ stuff. module Data.Type.BinP (     -- * Singleton@@ -39,16 +45,16 @@     BinP1, BinP2, BinP3, BinP4, BinP5, BinP6, BinP7, BinP8, BinP9,     ) where -import Data.BinP           (BinP (..))-import Data.Coerce        (coerce)-import Data.Nat           (Nat (..))-import Data.Proxy         (Proxy (..))-import Data.Type.Equality ((:~:) (..), TestEquality (..))-import Data.Typeable      (Typeable)-import Numeric.Natural    (Natural)+import Data.BinP       (BinP (..))+import Data.Nat        (Nat (..))+import Data.Proxy      (Proxy (..))+import Data.Typeable   (Typeable)+import Numeric.Natural (Natural)  import qualified Data.Type.Nat as N import qualified GHC.TypeLits  as GHC++import TrustworthyCompat  -- $setup -- >>> :set -XDataKinds
src/Data/Wrd.hs view
@@ -4,6 +4,7 @@ {-# LANGUAGE DeriveDataTypeable  #-} {-# LANGUAGE GADTs               #-} {-# LANGUAGE KindSignatures      #-}+{-# LANGUAGE Safe                #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE StandaloneDeriving  #-} -- | Fixed-'Wrd'th (unsigned) integers.@@ -55,6 +56,8 @@  -- $setup -- >>> :set -XDataKinds+-- >>> import Data.Nat (Nat(..))+-- >>> import qualified Data.Type.Nat as N  ------------------------------------------------------------------------------- -- Data@@ -154,7 +157,7 @@         go True  (W1 WE) = W1 WE         go False (W1 WE) = W1 WE         go b     (W0 w)  = W0 (go b w)-        go _     (W1 w)  = W0 (go True w) +        go _     (W1 w)  = W0 (go True w)  ------------------------------------------------------------------------------- -- Bits & FiniteBits@@ -489,7 +492,7 @@     go :: forall m. N.SNatI m => s -> (s, Wrd m)     go s = case N.snat :: N.SNat m of         N.SZ -> (s, WE)-        N.SS -> +        N.SS ->             let (s'', b)  = g s'                 (s' , w') = go s             in (s'', if b then W1 w' else W0 w')@@ -506,7 +509,7 @@         let (s'', b)  = g s' True             (s' , w') = go s w         in (s'', if b then W1 w' else W0 w')-    + wrdScanl2 :: forall s n. (s -> Bool -> Bool -> (s, Bool)) -> s ->  Wrd n -> Wrd n -> (s, Wrd n) wrdScanl2 g = go where     go :: s -> Wrd m -> Wrd m -> (s, Wrd m)
+ src/TrustworthyCompat.hs view
@@ -0,0 +1,9 @@+{-# LANGUAGE Trustworthy #-}+module TrustworthyCompat (+    (:~:) (..),+    TestEquality (..),+    coerce,+) where++import Data.Coerce        (coerce)+import Data.Type.Equality (TestEquality (..), (:~:) (..))