-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | Higher-rank Hashable
--   
--   This package provides higher rank analogues to the Hashable data type.
--   
--   The need for these sometimes arises in the presence of polymorphic
--   recursion.
@package hashable-extras
@version 0.2.2


module Data.Hashable.Extras
class Hashable1 t where hashWithSalt1 = hashWithSalt hash1 = hashWithSalt1 salt
hashWithSalt1 :: (Hashable1 t, Hashable a) => Int -> t a -> Int
hash1 :: (Hashable1 t, Hashable a) => t a -> Int
class Hashable2 t where hashWithSalt2 = hashWithSalt hash2 = hashWithSalt2 salt
hashWithSalt2 :: (Hashable2 t, Hashable a, Hashable b) => Int -> t a b -> Int
hash2 :: (Hashable2 t, Hashable a, Hashable b) => t a b -> Int
data Hashed
Hashed :: (Int -> Int) -> Hashed
[unhashed] :: Hashed -> Int -> Int
hashWith1 :: (Functor t, Hashable1 t) => (Int -> a -> Int) -> Int -> t a -> Int
hashWith2 :: (Bifunctor t, Hashable2 t) => (Int -> a -> Int) -> (Int -> b -> Int) -> Int -> t a b -> Int

-- | Extract the default salt used by <a>Hashable</a>
salt :: Int
instance Data.Hashable.Class.Hashable Data.Hashable.Extras.Hashed
instance Data.Hashable.Class.Hashable Data.Hashable.Extras.Salt
instance Data.Hashable.Extras.Hashable1 Data.Functor.Identity.Identity
instance Data.Hashable.Extras.Hashable1 GHC.Base.Maybe
instance Data.Hashable.Extras.Hashable1 []
instance Data.Hashable.Class.Hashable a => Data.Hashable.Extras.Hashable1 (Data.Either.Either a)
instance Data.Hashable.Class.Hashable a => Data.Hashable.Extras.Hashable1 ((,) a)
instance (Data.Hashable.Class.Hashable a, Data.Hashable.Class.Hashable b) => Data.Hashable.Extras.Hashable1 ((,,) a b)
instance (Data.Hashable.Class.Hashable a, Data.Hashable.Class.Hashable b, Data.Hashable.Class.Hashable c) => Data.Hashable.Extras.Hashable1 ((,,,) a b c)
instance (Data.Hashable.Class.Hashable a, Data.Hashable.Class.Hashable b, Data.Hashable.Class.Hashable c, Data.Hashable.Class.Hashable d) => Data.Hashable.Extras.Hashable1 ((,,,,) a b c d)
instance (Data.Hashable.Class.Hashable a, Data.Hashable.Class.Hashable b, Data.Hashable.Class.Hashable c, Data.Hashable.Class.Hashable d, Data.Hashable.Class.Hashable e) => Data.Hashable.Extras.Hashable1 ((,,,,,) a b c d e)
instance (Data.Hashable.Class.Hashable a, Data.Hashable.Class.Hashable b, Data.Hashable.Class.Hashable c, Data.Hashable.Class.Hashable d, Data.Hashable.Class.Hashable e, Data.Hashable.Class.Hashable f) => Data.Hashable.Extras.Hashable1 ((,,,,,,) a b c d e f)
instance Data.Hashable.Extras.Hashable2 Data.Either.Either
instance Data.Hashable.Extras.Hashable2 (,)
instance Data.Hashable.Class.Hashable a => Data.Hashable.Extras.Hashable2 ((,,) a)
instance (Data.Hashable.Class.Hashable a, Data.Hashable.Class.Hashable b) => Data.Hashable.Extras.Hashable2 ((,,,) a b)
instance (Data.Hashable.Class.Hashable a, Data.Hashable.Class.Hashable b, Data.Hashable.Class.Hashable c) => Data.Hashable.Extras.Hashable2 ((,,,,) a b c)
instance (Data.Hashable.Class.Hashable a, Data.Hashable.Class.Hashable b, Data.Hashable.Class.Hashable c, Data.Hashable.Class.Hashable d) => Data.Hashable.Extras.Hashable2 ((,,,,,) a b c d)
instance (Data.Hashable.Class.Hashable a, Data.Hashable.Class.Hashable b, Data.Hashable.Class.Hashable c, Data.Hashable.Class.Hashable d, Data.Hashable.Class.Hashable e) => Data.Hashable.Extras.Hashable2 ((,,,,,,) a b c d e)
