haskell Haskell 98 contravariant functors