首页 > 解决方案 > 用 ghci 调查 (->) 并试图找到它的根源

问题描述

我正在尝试使用 ghci 来调查 type (->)

我很想知道为什么我可以问:t (+),但不能:t (->)

Prelude> :t (->)
<interactive>:1:2: error: parse error on input ‘->’

幸运的是,这两个运算符都允许使用 进行调查:i,所以我认为这都是因为(+)是 Num 类的方法,而是(->)数据。

深入研究(->)

Prelude> :i (->)
data (->) (a :: TYPE q) (b :: TYPE r)   -- Defined in ‘GHC.Prim’
infixr 0 ->
instance Applicative ((->) a) -- Defined in ‘GHC.Base’
instance Functor ((->) r) -- Defined in ‘GHC.Base’
instance Monad ((->) r) -- Defined in ‘GHC.Base’
instance Monoid b => Monoid (a -> b) -- Defined in ‘GHC.Base’
instance Semigroup b => Semigroup (a -> b) -- Defined in ‘GHC.Base’

但是data (->)在 GHC.Prim 的Hackage 页面中没有任何痕迹。可能我检查了错误的语言版本,但 AFAIS 0.5.3 是最新的,而我的 ghci 版本是最新的。

我在哪里可以找到 的声明data (->)

最终,我想阅读关于TYPE,但我在 Google 上检索到的所有页面都在谈论type

我在哪里可以找到有关的信息TYPE

标签: haskellghci

解决方案


由于评论中已经给出了答案,我在这里总结一下:

  • (->)是一个类型构造函数。您可以使用:k (->) @Willem van Onsem进行调查

  • GHC.Prim任何地方都没有源代码。它完全由编译器生成,您无需费心查看它。当 GHCi 告诉您那里定义了某些东西时,请读为它来自“天上” @dfeuer


推荐阅读