多态种有什么用?

时间:2010-06-17 12:01:06

标签: haskell polymorphism higher-kinded-types

多态种类是UHC对Haskell类型系统supported的扩展,允许

data A x y = A (y x)

要键入(kinded?)为a -> (a -> *) -> *。它们有用吗?

3 个答案:

答案 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()中。