On Ad-Hoc Datatypes in Haskell
jaspervdj.be