- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
浏览各种包的黑线鳕时,我经常会看到如下所示的实例文档( Control.Category ):
Category k (Coercion k)
Category * (->)
或者这个( Control.Monad.Trans.Identity ):
MonadTrans (IdentityT *)
这里的签名到底是什么意思?它没有出现在源代码中,但我已经注意到它似乎出现在使用 PolyKinds 扩展的模块中。我怀疑它可能类似于 TypeApplication 但有一种。所以例如最后一个示例意味着,如果 IdentityT
的第一个参数具有类型 *
,则它是一个 monad 转换器。
所以我的问题是:
Category
实例中,我如何知道 k
是一种而不是类型?或者我只需要知道Category
的数量?我并不是要求某种解释。
最佳答案
To quote Richard Eisenberg’s recent post on the haskell-cafe mailing list :
Haddock struggles sometimes to render types with
-XPolyKinds
enabled. The problem is that GHC generally does not require kind arguments to be written and it does not print them out (unless you say-fprint-explicit-kinds
). But Haddock, I believe, prints out kinds whenever-XPolyKinds
is on. So the two different definitions are really the same: it's just that one module has-XPolyKinds
and the other doesn't.The
*
is the kind of ordinary types. SoInt
has kind*
(we writeInt :: *
) whileMaybe
has kind* -> *
.Typeable
actually has kindforall k. k -> Constraint
, meaning that it's polykinded. In the first snippet below, the*
argument toTypeable
instantiatesk
with*
, because type variable a has kind*
.
所以,是的,正如您所猜测的,它与PolyKinds
有关。 Haddock 通过一种“显式类型应用”来呈现这些多类型。碰巧类别
是多类的,具有forall k的类型。 (k -> k -> *) -> 约束
,因此 Haddock 会在每个实例旁边呈现类型应用程序。
在我看来,这是 Haddock 的一个错误或缺陷,因为据我所知,没有等效的源代码模拟。这很令人困惑,我不知道有什么比识别它通常表现的方式并从上下文中直观地推断出发生了什么更好的方法来理解它。
关于haskell - 黑线鳕实例列表中*(星号)或其他种类的含义是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41778182/
我是一名优秀的程序员,十分优秀!