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
一个可能的用法示例可以是使用conal的TypeCompose以无点样式编写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
这个问题的背景将是一个更具表现力的类型系统的动机.
也就是说,为Haskell添加多态类型的总体原因是为了改善类型级编程的体验.目前,Haskell中的类型级编程以基本上无类型的" 种类 "级别进行.一般来说,更丰富的语言将使Haskell中的类型级编程更容易.
一个更具体的例子是从SYB样式(引用)的泛型中删除(动态)Typeable约束,以及改进对更高通用编程的总体支持.