[Haskell-cafe] Type-directed functions with data kinds