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 +43/−29
- src/Data/Primitive/Instances.hs +24/−16
- test/Spec.hs +25/−0
- test/main.hs +0/−39
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