一个可能的用法示例可以是使用Conal的TypeCompose以点自由样式组合单子变换器。
type MyT = StateT Foo :. MaybeT :. ContT Bar
(仅作为示例,我不知道人们将如何使用那些foos和bars...)
改为:
type MyT m = StateT Foo (MaybeT (ContT Bar m))
(除了使用 newtype
封装之外,这将具有相同的结果)
目前,您需要为不同种类复制组合器代码,而此扩展去除了重复并允许使用一段代码来控制它们所有。
这个问题的背景可以追溯到更具表现力的kind系统的普遍动机。
也就是说,将多态kind添加到Haskell中的总体原因是为了改善类型级编程的体验。目前Haskell中的类型级编程在本质上以一种未经类型检查的“kind”级别进行。更丰富的kind语言将使得Haskell中的类型级编程在一般情况下更加容易。
一个更具体的例子是从SYB风格的通用编程中删除(动态)Typeable约束(引用),以及改进高阶kind通用编程的整体支持。
它们非常有用,可以定义操作任意元数数据构造函数的函数!
一个具体的例子是一个函数,给定一个任意元数的数据构造函数,返回一个将给定构造函数包装在Some()中的新数据构造函数。