浏览各种包的黑线鳕时,我经常看到类似这样的实例文档(Control.Category):
Category k (Coercion k)
Category * (->)
或者这个(Control.Monad.Trans.Identity):
MonadTrans (IdentityT *)
亲切的签名到底是什么意思?它没有出现在源代码中,但我已经注意到它似乎出现在使用PolyKinds扩展的模块中。我怀疑它可能就像一个 TypeApplication 但有一种。因此,例如最后一个示例意味着IdentityT
如果它的第一个参数有 kind ,它就是一个 monad 转换器*
。
所以我的问题是:
- 我的解释是否正确?善意的签名到底指的是什么?
- 首先
Category
,我怎么知道这k
是一种类型而不是类型?还是我只需要知道 arity 的数量Category
? - 与此语法类似的源代码是什么?
我不是要求对种类进行解释。