gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 15:48:41 25 4
gpt4 key购买 nike

浏览各种包的黑线鳕时,我经常会看到如下所示的实例文档( 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. So Int has kind * (we write Int :: *) while Maybe has kind * -> *. Typeable actually has kind forall k. k -> Constraint, meaning that it's polykinded. In the first snippet below, the * argument to Typeable instantiates k with *, because type variable a has kind *.

所以,是的,正如您所猜测的,它与PolyKinds有关。 Haddock 通过一种“显式类型应用”来呈现这些多类型。碰巧类别是多类的,具有forall k的类型。 (k -> k -> *) -> 约束,因此 Haddock 会在每个实例旁边呈现类型应用程序。

在我看来,这是 Haddock 的一个错误或缺陷,因为据我所知,没有等效的源代码模拟。这很令人困惑,我不知道有什么比识别它通常表现的方式并从上下文中直观地推断出发生了什么更好的方法来理解它。

关于haskell - 黑线鳕实例列表中*(星号)或其他种类的含义是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41778182/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com