在Haskell中,GHC base为类型
答案是
(->) r
定义了一个Functor实例:instance Functor ((->) r) where
fmap = (.)
Typeclassopedia解释说,((->) e)
是以类型e作为参数的函数的类型。这很有道理,但我不明白与Maybe
、Either a
甚至[]
相比,(->) e
后来是如何使用的。
我认为我理解了这些函子的定义,它们被命名为:Maybe
,Either a
,但我很难理解一个“无名”的类型(->) r
是如何使用的。
这是否意味着我需要怀疑每个类型签名中的任何其他a ->
都是函子?这是定义Haskell中箭头->
属性的一种方式吗?
这个箭头和类型签名中的箭头是同一个吗,还是来自lambda函数的箭头?我尝试在Haskell报告中查找,但那里使用->
作为文档的自己符号,所以没有帮助。
提前感谢任何可以帮助打破(->) r
困境的提示。
->
类型构造函数定义在哪里?它是内置的吗?答案是
->
是内置的,它是一个“函数箭头”或“函数类型构造函数”。
(->) r
并不是一个匿名类型。实际上,如果你写a -> b
,你就相当于写了(->) a b
。(->)
是一个类型构造器,就像Maybe
、Either
等一样。它被用作 "中缀运算符" 并不奇怪。比如(:)
是一个列表的数据构造器,也被用作中缀运算符。 - Willem Van Onsem((->) r)
在任何方面都与Either r
没有区别。 - n. m.type Arr = (->)
会有帮助吗?其中函数的类型是not :: Arr Bool Bool
,你提到的实例是instance Functor (Arr a) where fmap :: (b -> b') -> (Arr a b -> Arr a b'); fmap = (.)
。 - Iceland_jack