packages feed

prim-instances 0.1.0.0 → 0.2

raw patch · 4 files changed

+92/−84 lines, 4 filesdep −base-orphansdep −quickcheck-instancesdep −tastydep ~basedep ~primitivedep ~quickcheck-classesPVP ok

version bump matches the API change (PVP)

Dependencies removed: base-orphans, quickcheck-instances, tasty, tasty-quickcheck

Dependency ranges changed: base, primitive, quickcheck-classes

API changes (from Hackage documentation)

- Data.Primitive.Instances: instance Data.Primitive.Types.Prim a => Data.Primitive.Types.Prim (Data.Functor.Identity.Identity a)
- Data.Primitive.Instances: instance Data.Primitive.Types.Prim a => Data.Primitive.Types.Prim (Data.Ord.Down a)
- Data.Primitive.Instances: instance Data.Primitive.Types.Prim a => Data.Primitive.Types.Prim (Data.Semigroup.First a)
- Data.Primitive.Instances: instance Data.Primitive.Types.Prim a => Data.Primitive.Types.Prim (Data.Semigroup.Internal.Dual a)
- Data.Primitive.Instances: instance Data.Primitive.Types.Prim a => Data.Primitive.Types.Prim (Data.Semigroup.Internal.Product a)
- Data.Primitive.Instances: instance Data.Primitive.Types.Prim a => Data.Primitive.Types.Prim (Data.Semigroup.Internal.Sum a)
- Data.Primitive.Instances: instance Data.Primitive.Types.Prim a => Data.Primitive.Types.Prim (Data.Semigroup.Last a)
- Data.Primitive.Instances: instance Data.Primitive.Types.Prim a => Data.Primitive.Types.Prim (Data.Semigroup.Max a)
- Data.Primitive.Instances: instance Data.Primitive.Types.Prim a => Data.Primitive.Types.Prim (Data.Semigroup.Min a)
- Data.Primitive.Instances: instance forall k a (b :: k). Data.Primitive.Types.Prim a => Data.Primitive.Types.Prim (Data.Functor.Const.Const a b)

Files

prim-instances.cabal view
@@ -1,38 +1,52 @@-name:                prim-instances-version:             0.1.0.0-synopsis:            prim typeclass instances-description:         orphan instances for primitive's 'Prim' typeclass.-                     Types which abstract over a single primitive type-                     have trivially lawful and sometimes useful instances.-homepage:            https://github.com/chessai/prim-instances.git-license:             BSD3-license-file:        LICENSE-author:              chessai-maintainer:          chessai1996@gmail.com-copyright:           2018 (c) chessai-category:            Data-build-type:          Simple-extra-source-files:  ChangeLog.md-cabal-version:       >=1.10+cabal-version: 2.2+name:+  prim-instances+version:+  0.2+synopsis:+  Prim typeclass instances+description:+  orphan instances for primitive's 'Prim' typeclass.+  Types which abstract over a single primitive type+  (i.e. are well-aligned) have trivially lawful and+  sometimes useful instances.+homepage:+  https://github.com/chessai/prim-instances.git+license:+  BSD-3-Clause+license-file:+  LICENSE+author:+  chessai+maintainer:+  chessai <chessai1996@gmail.com>+copyright:+  2018 (c) chessai+category:+  Data+build-type:+  Simple+extra-source-files:+  ChangeLog.md  library-  exposed-modules:     Data.Primitive.Instances-  build-depends:       base >=4.7 && <4.13, primitive >= 0.6.4.0-  hs-source-dirs:      src-  default-language:    Haskell2010+  exposed-modules:+    Data.Primitive.Instances+  build-depends:+    , base >=4.7 && <4.14+    , primitive >= 0.6.4 && < 0.8+  hs-source-dirs:+    src+  default-language:+    Haskell2010  test-suite test   default-language: Haskell2010   hs-source-dirs: test-  main-is: main.hs+  main-is: Spec.hs   type: exitcode-stdio-1.0   build-depends:-       base >= 4.7 && < 4.12      , QuickCheck-     , base-orphans-     , quickcheck-classes >= 0.4.11.1-     , quickcheck-instances-     , primitive >= 0.6.4.0 -     , prim-instances -     , tasty-     , tasty-quickcheck+     , base+     , prim-instances+     , quickcheck-classes
src/Data/Primitive/Instances.hs view
@@ -1,14 +1,17 @@-{-# LANGUAGE BangPatterns               #-}-{-# LANGUAGE CPP                        #-}-{-# LANGUAGE GeneralizedNewtypeDeriving #-}-{-# LANGUAGE InstanceSigs               #-}-{-# LANGUAGE MagicHash                  #-}-{-# LANGUAGE ScopedTypeVariables        #-}-{-# LANGUAGE StandaloneDeriving         #-}+{-# language+        BangPatterns+      , CPP+      , GeneralizedNewtypeDeriving+      , InstanceSigs+      , MagicHash+      , ScopedTypeVariables+      , StandaloneDeriving+      , UnboxedTuples+  #-}+ #if __GLASGOW_HASKELL__ >= 800-{-# LANGUAGE TypeInType                 #-}+{-# language TypeInType #-} #endif-{-# LANGUAGE UnboxedTuples              #-}  {-# OPTIONS_GHC       -Weverything@@ -24,6 +27,7 @@ module Data.Primitive.Instances () where  import Data.Complex (Complex(..))+#if !MIN_VERSION_primitive(0,7,0) import Data.Functor.Const (Const(..)) #if MIN_VERSION_base(4,8,0) import Data.Functor.Identity (Identity(..))@@ -31,7 +35,7 @@ import qualified Data.Monoid as Monoid import qualified Data.Semigroup as Semigroup import Data.Ord (Down(..))---import Data.Primitive.ByteArray+#endif import Data.Primitive.Types (Prim(..), defaultSetOffAddr#, defaultSetByteArray#) import GHC.Real (Ratio(..)) import Data.Word (Word64)@@ -44,7 +48,7 @@   indexByteArray# arr# i# =     let x,y :: a         x = indexByteArray# arr# (2# *# i#)-        y = indexByteArray# arr# (2# *# i# +# 1#) +        y = indexByteArray# arr# (2# *# i# +# 1#)     in x :+ y   readByteArray# :: forall s a. (Prim a) => MutableByteArray# s -> Int# -> State# s -> (# State# s, Complex a #)   readByteArray# arr# i# =@@ -86,12 +90,12 @@   {-# INLINE setOffAddr# #-}  instance (Integral a, Prim a) => Prim (Ratio a) where-  sizeOf# _ = 2# *# sizeOf# (undefined :: a) -  alignment# _ = alignment# (undefined :: a) +  sizeOf# _ = 2# *# sizeOf# (undefined :: a)+  alignment# _ = alignment# (undefined :: a)   indexByteArray# arr# i# =     let x,y :: a         x = indexByteArray# arr# (2# *# i#)-        y = indexByteArray# arr# (2# *# i# +# 1#) +        y = indexByteArray# arr# (2# *# i# +# 1#)     in x :% y   readByteArray# :: forall s a. (Prim a) => MutableByteArray# s -> Int# -> State# s -> (# State# s, Ratio a #)   readByteArray# arr# i# =@@ -132,13 +136,13 @@   {-# INLINE writeOffAddr# #-}   {-# INLINE setOffAddr# #-} -instance Prim Fingerprint where +instance Prim Fingerprint where   sizeOf# _ = 2# *# sizeOf# (undefined :: Word64)   alignment# _ = alignment# (undefined :: Word64)   indexByteArray# arr# i# =     let x,y :: Word64         x = indexByteArray# arr# (2# *# i#)-        y = indexByteArray# arr# (2# *# i# +# 1#) +        y = indexByteArray# arr# (2# *# i# +# 1#)     in Fingerprint x y   readByteArray# :: forall s. MutableByteArray# s -> Int# -> State# s -> (# State# s, Fingerprint #)   readByteArray# arr# i# =@@ -179,6 +183,8 @@   {-# INLINE writeOffAddr# #-}   {-# INLINE setOffAddr# #-} +#if !MIN_VERSION_primitive(0,7,0)+ deriving instance Prim a => Prim (Down a) #if MIN_VERSION_base(4,8,0) deriving instance Prim a => Prim (Identity a)@@ -193,3 +199,5 @@ deriving instance Prim a => Prim (Semigroup.Max a) #endif deriving instance Prim a => Prim (Const a b)++#endif
+ test/Spec.hs view
@@ -0,0 +1,25 @@+{-# language+        ScopedTypeVariables+  #-}++module Main (main) where++import Test.QuickCheck.Classes+import Test.QuickCheck (Arbitrary(..))++import Data.Complex (Complex(..))+import GHC.Fingerprint (Fingerprint(..))+import GHC.Real (Ratio(..))+import Data.Proxy (Proxy(..))++import Data.Primitive.Instances ()++main :: IO ()+main = lawsCheckMany+  [ ("Complex Double", [primLaws (Proxy :: Proxy (Complex Double))])+  , ("Ratio Double", [primLaws (Proxy :: Proxy (Ratio Int))])+  , ("Fingerprint", [primLaws (Proxy :: Proxy Fingerprint)])+  ]++instance Arbitrary Fingerprint where+  arbitrary = Fingerprint <$> arbitrary <*> arbitrary
− test/main.hs
@@ -1,39 +0,0 @@-{-# LANGUAGE GeneralizedNewtypeDeriving #-}-{-# LANGUAGE ScopedTypeVariables #-}-{-# LANGUAGE StandaloneDeriving #-}-{-# LANGUAGE TypeApplications #-}-{-# LANGUAGE DeriveFunctor #-}--import Data.Complex-import Data.Proxy (Proxy(..))-import Data.Ratio (Ratio(..))-import Data.Word (Word64)-import GHC.Fingerprint (Fingerprint)-import Test.QuickCheck hiding (Fixed)-import Test.QuickCheck.Gen (suchThat)-import Test.QuickCheck.Instances ()-import Test.Tasty (defaultMain, testGroup, TestTree)-import Data.Primitive.Instances-import Data.Primitive.Types (Prim(..))-import qualified GHC.Num as Num-import qualified Test.QuickCheck.Classes as QCC--type Laws = QCC.Laws--main :: IO ()-main = QCC.lawsCheckMany namedTests-  where-    namedTests :: [(String, [Laws])]-    namedTests =-      [ ("Complex Double", myLaws pComplex)-      , ("Ratio Int", myLaws pRatio)-      , ("Fingerprint", myLaws pRatio)-      ]-    myLaws :: (Arbitrary a, Show a, Eq a, Prim a) => Proxy a -> [Laws]-    myLaws p = [QCC.primLaws p]--p :: forall a. Proxy a; p = Proxy--pComplex     = p @(Complex Double)-pRatio       = p @(Ratio Int)-pFingerprint = p @Fingerprint