答案 0 :(得分:11)
一个可能的用法示例可以使用conal的TypeCompose以无点样式编写monad变换器。
type MyT = StateT Foo :. MaybeT :. ContT Bar
(作为一个例子,我不知道那些人会对那些泡沫和酒吧做什么..)
而不是:
type MyT m = StateT Foo (MaybeT (ContT Bar m))
(除了newtype
- 包装器之外,这将有相同的结果)
目前你需要复制不同种类的组合子代码,这个扩展废除了重复,允许使用一段代码来统治它们。
答案 1 :(得分:11)
Adding Polymorphic Kinds to GHC
此问题的背景是motivation in general for a more expressive kind system。
也就是说,为Haskell添加多态类型的总体原因是为了改善类型级编程的体验。目前,Haskell中的类型级编程以基本上无类型的“kind”级别进行。一般来说,更丰富的语言将使Haskell中的类型级编程变得更容易。
更具体的例子是从SYB样式(citation)的泛型中删除(动态)Typeable约束,以及改进对更高通用编程的总体支持。
答案 2 :(得分:1)
当然,它们对于定义具有任意arity的数据构造函数的函数非常有用!
一个具体的例子可能是一个函数,给定一个具有任意arity的数据构造函数,返回一个新的数据构造函数,它将给定的构造函数包装在Some()中。