在哪个文件中我会找到( - >)的定义

时间:2017-07-26 19:13:47

标签: haskell

我会在哪个文件中找到( - >)

的定义

我的假设是,这是在GHC.something中的某个地方定义的,但搜索起来很棘手。

3 个答案:

答案 0 :(得分:6)

->是关键字,而不是中缀式函数。它没有在Haskell基础库中定义,也不能定义。

(编辑:但正如frasertweedale和Rein Henrichs所说,编译器给予了特殊处理,以便(->)可以被视为常规类型构造函数。)

答案 1 :(得分:4)

在Haskell语言本身中,

(->) 不是关键字但是 类型构造函数。即:

λ> :i (->)
data (->) t1 t2     -- Defined in ‘GHC.Prim’
infixr 0 `(->)`
instance Monad ((->) r) -- Defined in ‘GHC.Base’
instance Functor ((->) r) -- Defined in ‘GHC.Base’
instance Applicative ((->) a) -- Defined in ‘GHC.Base’
instance Monoid b => Monoid (a -> b) -- Defined in ‘GHC.Base’

它只是一个中缀类型构造函数,您可以只使用它 像任何其他类型的构造函数一样。

定义它的位置的问题有点棘手。 在GHC.Base的源代码中,您将找到以下内容 评价:

GHC.Prim    Has no implementation.  It defines built-in things, and
            by importing it you bring them into scope.
            The source file is GHC.Prim.hi-boot, which is just
            copied to make GHC.Prim.hi

GHC的构建过程直接生成一个接口文件,公开与(->)相关联的行为。

答案 2 :(得分:1)

(->)不是关键字,而是中缀式函数(因为您可以将其作为参数传递并可以部分应用),但由于其重要性,编译器会特别对其进行处理:{{ 3}}