多态种有什么用?

sdc*_*vvc 17 polymorphism haskell higher-kinded-types

多态种类是Haskell类型系统的扩展,由UHC 支持,允许

data A x y = A (y x)
Run Code Online (Sandbox Code Playgroud)

被打字(kinded?)as a -> (a -> *) -> *.它们对什么有用?

yai*_*chu 11

一个可能的用法示例可以是使用conalTypeCompose以无点样式编写monad变换器.

type MyT = StateT Foo :. MaybeT :. ContT Bar
Run Code Online (Sandbox Code Playgroud)

(仅作为一个例子,我不知道与那些foos和酒吧有什么关系..)

代替:

type MyT m = StateT Foo (MaybeT (ContT Bar m))
Run Code Online (Sandbox Code Playgroud)

(除了newtype-wrappers 之外,这会有相同的结果)

目前,您需要复制不同类型的组合器代码,此扩展程序取消重复,并允许使用一段代码来统治它们.


Don*_*art 11

添加多晶型物质到GHC

这个问题的背景将是一个更具表现力的类型系统动机.

也就是说,为Haskell添加多态类型的总体原因是为了改善类型级编程的体验.目前,Haskell中的类型级编程以基本上无类型的" 种类 "级别进行.一般来说,更丰富的语言将使Haskell中的类型级编程更容易.

一个更具体的例子是从SYB样式(引用)的泛型中删除(动态)Typeable约束,以及改进对更高通用编程的总体支持.