<font face="verdana, sans-serif">Hi everybody!</font><div><font face="verdana, sans-serif"><br></font></div><div><font face="verdana, sans-serif">I have just released a handy package on Hackage that will interest you if you&#39;ve ever used unordered-containers with a custom type.</font></div>

<div><font face="verdana, sans-serif"><br></font></div><div><font face="verdana, sans-serif">In order to do such a thing, you&#39;d need to define an instance of Hashable. This process could easily be automated.</font></div>

<div><font face="verdana, sans-serif"><br></font></div><div><font face="verdana, sans-serif">And so I did.</font></div><div><font face="verdana, sans-serif"><br></font></div><div><font face="verdana, sans-serif">{-# LANGUAGE DeriveGeneric #-}</font></div>

<div><font face="verdana, sans-serif">module ThisIsPrettyNeat where</font></div><div><font face="verdana, sans-serif"><br></font></div><div><font face="verdana, sans-serif">import Data.Hashable.Generic</font></div><div><font face="verdana, sans-serif">import GHC.Generics</font></div>

<div><font face="verdana, sans-serif"><br></font></div><div><font face="verdana, sans-serif">data MyCoolType a = MCT0 | MCT1 (Either Int a) | MCT2 (MyCoolType a) (MyCoolType a)</font></div><div><font face="verdana, sans-serif">    deriving Generic</font></div>

<div><font face="verdana, sans-serif"><br></font></div><div><font face="verdana, sans-serif">instance Hashable a =&gt; Hashable MyCoolType where</font></div><div><font face="verdana, sans-serif">    hashWithSalt s x = gHashWithSalt s x</font></div>

<div><font face="verdana, sans-serif">    {-# INLINEABLE hashWithSalt #-}</font></div><div><font face="verdana, sans-serif"><br></font></div><div><font face="verdana, sans-serif">and voila. You have a very performant instance of Hashable, with minimal boilerplate, no template haskell, and no subtle bugs.</font></div>

<div><font face="verdana, sans-serif"><br></font></div><div><font face="verdana, sans-serif">If you want to play with it, here it is: <a href="http://hackage.haskell.org/package/hashable-generics-1.1.6">http://hackage.haskell.org/package/hashable-generics-1.1.6</a></font></div>

<div><font face="verdana, sans-serif"><br></font></div><div><font face="verdana, sans-serif">Have fun!</font></div><div><font face="verdana, sans-serif">  - Clark</font></div><div><font face="verdana, sans-serif"><br></font></div>

<div><font face="verdana, sans-serif">Oh yeah, and if anyone wants to help me figure out why it&#39;s 1.3x slower than my hand-rolled instances, that would be really helpful.</font></div>