多态类型是 Haskell 类型系统的扩展,由 UHC支持,允许
data A x y = A (y x)
被键入(kinded?)为a -> (a -> *) -> *
。它们有什么用?
一个可能的使用示例是使用 conal 的TypeCompose以无点样式组合 monad 转换器。
type MyT = StateT Foo :. MaybeT :. ContT Bar
(仅作为一个例子,我不知道一个人将如何处理那些 foos 和 bar ..)
代替:
type MyT m = StateT Foo (MaybeT (ContT Bar m))
(除了newtype
-wrappers 之外,这将具有相同的结果)
目前,您需要为不同类型复制组合器代码,此扩展取消了重复并允许使用一段代码来统治它们。
这个问题的背景通常是一种更具表现力的类型系统的动机。
也就是说,向 Haskell 添加多态种类的总体原因是为了改善类型级编程的体验。目前,Haskell 中的类型级别编程以基本上无类型的“种类”级别进行。一般来说,一种更丰富的语言将使 Haskell 中的类型级编程更容易。
一个更具体的例子是从 SYB 风格(引文)的泛型中删除(动态)Typeable 约束,以及改进对更高种类的泛型编程的整体支持。
当然,它们对于定义对具有任意数量的数据构造函数进行操作的函数很有用!
一个具体的例子可以是一个函数,给定一个具有任意数量的数据构造函数,返回一个新的数据构造函数,该构造函数将给定的构造函数包装在 Some() 中。