在 Haskell 中 GHC base具有类型 (->) r
的 Functor 实例的定义:
instance Functor ((->) r) where
fmap = (.)
Typeclassopedia解释 ((->) e)
是将 e 类型的值作为参数的函数类型。这是有道理的,但我不知道如何 (->) e
较晚使用,相较于 Maybe
, Either a
, 甚至 []
.我想我理解这些仿函数定义,它们被命名为:
Maybe
, Either a
,但我很难理解“无名”类型 (->) r
用来。这是否意味着我需要怀疑任何其他
a ->
在每个类型签名中作为仿函数?这是一种定义箭头属性的方法 ->
在 haskell ?这是否与类型签名中的箭头或来自 lambda 函数的箭头相同?我尝试在 Haskell 报告中查找,但有
->
用于文档的自己的符号,所以没有运气。提前感谢任何可以帮助打破僵局的提示
(->) r
.更新:根据评论,我想我应该问哪里
->
类型构造函数定义?它是内置的吗?答案是
->
是内置的,它是一个 "function arrow" or "function type constructor" .
最佳答案
(->) r
不是无名类型。它的名字是 (->)
,就像 Either
是一个名字。事实上,如果你写 a -> b
, 你写了 (->) a b
.或者如果你写 a -> b -> c
,则规范形式为 (->) a ((->) b c)
.(->)
是一个类型构造函数,就像 Maybe
, Either
等。事实上,它被用作中缀运算符并不奇怪。如果你写 x : xs
例如,那么规范形式是 (:) x xs
(或更详细地说 ((:) x) xs
)。如果您启用 TypeOperators
扩展,你甚至可以写类型像 Left 1 :: Int `Either` String
.
关于haskell - 为什么要为像 'nameless' 这样的 `(->) e` 类型定义一个仿函数实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63215654/