gpt4 book ai didi

haskell - 为什么要为像 'nameless' 这样的 `(->) e` 类型定义一个仿函数实例

转载 作者:行者123 更新时间:2023-12-03 23:05:07 25 4
gpt4 key购买 nike

在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com