当前位置:  开发笔记 > 编程语言 > 正文

在黑线鳕的实例列表中*(星号)或其他类型的含义是什么

如何解决《在黑线鳕的实例列表中*(星号)或其他类型的含义是什么》经验,为你挑选了1个好方法。

浏览各种软件包的haddocks我经常会看到这样的实例文​​档(Control.Category):

Category k (Coercion k)
Category * (->)

或者这个(Control.Monad.Trans.Identity):

MonadTrans (IdentityT *)

这种签名究竟意味着什么呢?它没有出现在源代码中,但我已经注意到它似乎发生在使用PolyKinds扩展的模块中.我怀疑它可能像TypeApplication但有一种类型.因此,例如最后一个示例意味着IdentityT如果它的第一个参数具有类型,则它是monad变换器*.

所以我的问题是:

我的解释是否正确以及签名所涉及的具体内容是什么?

在第一个Category例子中,我怎么知道这k是一种而不是一种类型?或者我只是要知道这个Category

这段语法的源代码是什么?

我不是要求各种解释.



1> Alexis King..:

引用Richard Eisenberg最近关于haskell-cafe邮件列表的帖子:

Haddock有时会努力渲染已-XPolyKinds启用的类型.问题是GHC通常不需要写出类型的参数,也不会打印出来(除非你说-fprint-explicit-kinds).但是,我相信哈多克会随时打印各种各样的东西-XPolyKinds.所以两个不同的定义实际上是相同的:它只是一个模块-XPolyKinds而另一个没有.

*是那种普通的类型.所以Int有种*(我们写Int :: *)同时Maybe有种* -> *.Typeable实际上是善良的forall k. k -> Constraint,这意味着它是多色的.在下面的第一个代码段,所述*参数Typeable实例化k*,因为型变量a种类*.

所以是的,正如你猜测的那样,它与它有关PolyKinds.Haddock使用一种"显式类应用程序"呈现这些多边形类型.恰好Category是多边形的,具有类型的forall k. (k -> k -> *) -> Constraint,所以Haddock在每个实例旁边呈现类型的应用程序.

在我看来,这是Haddock的错误或错误,因为据我所知,没有相同的源代码模拟.令人困惑的是,我不知道一种更好的理解方式,而不是认识它通常表现出来的方式,并从视觉上推断出从背景中发生的事情.


同意,我也认为这是一个错误.也许使用`类别@k(强制k)`将是一个更好的符号.
推荐阅读
凹凸曼00威威_694
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有