Ska*_*kab 2 constructor haskell function functor
如果您输入:i (->)
GHCi 并点击Enter它,则会返回以下内容:
data (->) t1 t2 -- Defined in \xe2\x80\x98GHC.Prim\xe2\x80\x99\ninfixr 0 `(->)`\ninstance Monad ((->) r)\xc2\xa0\xe2\x80\x93 Defined in \xe2\x80\x98GHC.Base\xe2\x80\x99\ninstance Functor ((->) r)\xc2\xa0\xe2\x80\x93 Defined in \xe2\x80\x98GHC.Base\xe2\x80\x99\ninstance Applicative ((->) a)\xc2\xa0\xe2\x80\x93 Defined in \xe2\x80\x98GHC.Base\xe2\x80\x99\ninstance Monoid b => Monoid (a -> b)\xc2\xa0\xe2\x80\x93 Defined in \xe2\x80\x98GHC.Base\xe2\x80\x99\n
Run Code Online (Sandbox Code Playgroud)\n从关键字来看data
,它是某种类型构造函数,但它到底构造什么以及该类型的值构造函数是什么(如果存在)?
当我了解到函数是类型类的一部分并且在命令返回的类型类描述中Functor
列出时,问题就出现了。我试图获取有关的信息,但无济于事。然后,在类型类的描述中,我发现(可以使用 获得其描述,即不带参数)并意识到我应该尝试一下,我这样做了并得到了上面显示的信息。((->) r)
:i Functor
((->) r)
Functor
(Either a)
:i Either
:i (->)
它只是函数类型构造函数。
类型(->) a b
(通常以中缀形式写为)是将类型作为参数并返回类型a -> b
的函数的类型。您将在任何函数的类型签名中看到这一点。a
b
与 中的大多数其他内容一样GHC.Prim
,它是内置的并且有点“神奇”,因为它没有值构造函数 - 但您可以以我期望的a -> b
所有方式定义 type 的值,即一个函数已经知道了。