Dstable Portability: GHC NOTE: This module exports the Hashable class for convenience. If this becomes a problem, just use a qualified import.NoneHidden internal type class.  GHC.Generics-based  implementation This provides a generic " implementation for one type at a  time. If the type of the value  is asked to hash = contains values of other types, those types have to provide  : instances. This also means that recursive types can only  be used with  if a  instance has been defined  as well (see examples below). The typical usage for " is for reducing boilerplate code  when defining " instances for ordinary algebraic ? datatypes. See the code below for some simple usage examples:   {-# LANGUAGE DeriveGeneric #-}   import Data.Hashable 0 import Data.Hashable.Generic ( gHashWithSalt )  import GHC.Generics   -- simple record ' data Foo = Foo AccountId Name Address  deriving Generic   type Address = [String]  type Name = String # newtype AccountId = AccountId Int   instance Hashable AccountId : instance Hashable Foo where hashWithSalt = gHashWithSalt   -- recursive list-like type # data N = Z | S N deriving Generic  8 instance Hashable N where hashWithSalt = gHashWithSalt  " -- parametric and recursive type + data Bar a = Bar0 | Bar1 a | Bar2 (Bar a)  deriving Generic  L instance Hashable a => Hashable (Bar a) where hashWithSalt = gHashWithSalt  Note: The 0 type-class showing up in the type-signature is = used internally and not exported on purpose currently        hashable-generics-1.1Data.Hashable.Generichashable-1.1.2.5 Data.Hashable hashWithSalthashHashable gHashWithSalt GHashablegHashWithSalt_$fGHashable:+:$fGHashable:*: $fGHashableM1 $fGHashableK1 $fGHashableU1