haskell-type-typeclass