instant-hashable 0.1.0.1 → 0.2
raw patch · 3 files changed
+49/−27 lines, 3 filesdep ~basePVP ok
version bump matches the API change (PVP)
Dependency ranges changed: base
API changes (from Hackage documentation)
- Generics.Instant.Functions.Hashable: instance (Generics.Instant.Functions.Hashable.GHashable a, Generics.Instant.Functions.Hashable.GHashable b) => Generics.Instant.Functions.Hashable.GHashable (a Generics.Instant.Base.:*: b)
- Generics.Instant.Functions.Hashable: instance (Generics.Instant.Functions.Hashable.GHashable a, Generics.Instant.Functions.Hashable.GHashable b) => Generics.Instant.Functions.Hashable.GHashable (a Generics.Instant.Base.:+: b)
- Generics.Instant.Functions.Hashable: instance Data.Hashable.Class.Hashable a => Generics.Instant.Functions.Hashable.GHashable (Generics.Instant.Base.Rec a)
- Generics.Instant.Functions.Hashable: instance Data.Hashable.Class.Hashable a => Generics.Instant.Functions.Hashable.GHashable (Generics.Instant.Base.Var a)
- Generics.Instant.Functions.Hashable: instance Generics.Instant.Functions.Hashable.GHashable Generics.Instant.Base.U
- Generics.Instant.Functions.Hashable: instance Generics.Instant.Functions.Hashable.GHashable Generics.Instant.Base.Z
- Generics.Instant.Functions.Hashable: instance forall (k :: BOX) (k1 :: BOX) (c :: k) (p :: k1) (q :: k1) a. Generics.Instant.Functions.Hashable.GHashable a => Generics.Instant.Functions.Hashable.GHashable (Generics.Instant.Base.CEq c p q a)
+ Generics.Instant.Functions.Hashable: class (Representable a, GHashable (Rep a)) => RepGHashable a
+ Generics.Instant.Functions.Hashable: ghashWithSaltDefault :: (Representable a, GHashable (Rep a)) => Int -> a -> Int
+ Generics.Instant.Functions.Hashable: instance (GHashable a, GHashable b) => GHashable (a :*: b)
+ Generics.Instant.Functions.Hashable: instance (GHashable a, GHashable b) => GHashable (a :+: b)
+ Generics.Instant.Functions.Hashable: instance (Representable a, GHashable (Rep a)) => RepGHashable a
+ Generics.Instant.Functions.Hashable: instance GHashable U
+ Generics.Instant.Functions.Hashable: instance GHashable Z
+ Generics.Instant.Functions.Hashable: instance GHashable a => GHashable (CEq c p q a)
+ Generics.Instant.Functions.Hashable: instance Hashable a => GHashable (Rec a)
+ Generics.Instant.Functions.Hashable: instance Hashable a => GHashable (Var a)
- Generics.Instant.Functions.Hashable: ghashWithSalt :: (Representable a, GHashable (Rep a)) => Int -> a -> Int
+ Generics.Instant.Functions.Hashable: ghashWithSalt :: GHashable a => Int -> a -> Int
Files
- CHANGELOG.md +11/−0
- instant-hashable.cabal +6/−3
- src/lib/Generics/Instant/Functions/Hashable.hs +32/−24
CHANGELOG.md view
@@ -1,3 +1,14 @@+# Version 0.2++* Rename 'ghashWithSalt' to 'ghashWithSaltDefault'.++* Export 'RepGHashable'++* Export 'GHashable' internals.++* Relax dependencies.++ # Version 0.1.0.1 * Raise upper bound on `instant-generics` dependency.
instant-hashable.cabal view
@@ -1,11 +1,14 @@ name: instant-hashable-version: 0.1.0.1+version: 0.2 author: Renzo Carbonara maintainer: renzo@carbonara.com.ar copyright: Renzo Carbonara 2015 license: BSD3 license-file: LICENSE.txt-category: Web+stability: Experimental+homepage: https://github.com/k0001/instant-hashable+bug-reports: https://github.com/k0001/instant-hashable/issues+category: Generics build-type: Simple extra-source-files: README.md CHANGELOG.md cabal-version: >=1.18@@ -18,7 +21,7 @@ Generics.Instant.Functions.Hashable build-depends: hashable >=1.2 && <1.3- , base >=4.8 && <4.9+ , base >=4.7 && <4.9 , instant-generics >=0.4 && <0.6 ghcjs-options: -Wall -O3 ghc-options: -Wall -O2
src/lib/Generics/Instant/Functions/Hashable.hs view
@@ -4,12 +4,14 @@ {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE TypeOperators #-} {-# LANGUAGE PolyKinds #-}+{-# LANGUAGE UndecidableInstances #-} module Generics.Instant.Functions.Hashable ( -- $defaults- ghashWithSalt+ ghashWithSaltDefault+ , RepGHashable -- * Internals- , GHashable+ , GHashable(..) ) where import Data.Hashable (Hashable(hashWithSalt))@@ -18,48 +20,54 @@ -------------------------------------------------------------------------------- -- $defaults ----- You can use 'ghashWithSalt' as your generic 'hashWithSalt' for any+-- You can use 'ghashWithSaltDefault' as your generic 'hashWithSalt' for any -- 'Representable' type as follows: -- -- @--- instance 'Hashable' MyType where hashWithSalt = 'ghashWithSalt'+-- instance 'Hashable' MyType where hashWithSalt = 'ghashWithSaltDefault' -- @ -ghashWithSalt :: (Representable a, GHashable (Rep a)) => Int -> a -> Int-ghashWithSalt = \s a -> ghashWithSalt' s (from a)-{-# INLINABLE ghashWithSalt #-}+ghashWithSaltDefault :: (Representable a, GHashable (Rep a)) => Int -> a -> Int+ghashWithSaltDefault = \s a -> ghashWithSalt s (from a)+{-# INLINABLE ghashWithSaltDefault #-} +-- | @'RepGHashable'@ is simply a synonym for+-- @('Representable' a, 'GHashable' ('Rep' a))@ with the convenient+-- kind @(* -> 'GHC.Exts.Constraint')@+class (Representable a, GHashable (Rep a)) => RepGHashable a+instance (Representable a, GHashable (Rep a)) => RepGHashable a+ -------------------------------------------------------------------------------- class GHashable a where- ghashWithSalt' :: Int -> a -> Int+ ghashWithSalt :: Int -> a -> Int instance GHashable Z where- ghashWithSalt' _ _ = error- "Generics.Instant.Functions.Hashable.GHashable Z ghashWithSalt' - impossible"+ ghashWithSalt _ _ = error+ "Generics.Instant.Functions.Hashable.GHashable Z ghashWithSalt - impossible" instance GHashable U where- ghashWithSalt' s U = hashWithSalt s ()- {-# INLINABLE ghashWithSalt' #-}+ ghashWithSalt s U = hashWithSalt s ()+ {-# INLINABLE ghashWithSalt #-} instance GHashable a => GHashable (CEq c p q a) where- ghashWithSalt' s (C a) = ghashWithSalt' s a- {-# INLINABLE ghashWithSalt' #-}+ ghashWithSalt s (C a) = ghashWithSalt s a+ {-# INLINABLE ghashWithSalt #-} instance (GHashable a, GHashable b) => GHashable (a :*: b) where- ghashWithSalt' s (a :*: b) = ghashWithSalt' (ghashWithSalt' s a) b- {-# INLINABLE ghashWithSalt' #-}+ ghashWithSalt s (a :*: b) = ghashWithSalt (ghashWithSalt s a) b+ {-# INLINABLE ghashWithSalt #-} instance (GHashable a, GHashable b) => GHashable (a :+: b) where- ghashWithSalt' s lr = 0 `hashWithSalt` case lr of- L a -> Left (ghashWithSalt' s a)- R b -> Right (ghashWithSalt' s b)- {-# INLINABLE ghashWithSalt' #-}+ ghashWithSalt s lr = 0 `hashWithSalt` case lr of+ L a -> Left (ghashWithSalt s a)+ R b -> Right (ghashWithSalt s b)+ {-# INLINABLE ghashWithSalt #-} instance Hashable a => GHashable (Var a) where- ghashWithSalt' s (Var a) = hashWithSalt s a- {-# INLINABLE ghashWithSalt' #-}+ ghashWithSalt s (Var a) = hashWithSalt s a+ {-# INLINABLE ghashWithSalt #-} instance Hashable a => GHashable (Rec a) where- ghashWithSalt' s (Rec a) = hashWithSalt s a- {-# INLINABLE ghashWithSalt' #-}+ ghashWithSalt s (Rec a) = hashWithSalt s a+ {-# INLINABLE ghashWithSalt #-}