"运算符?-6ren"> "运算符?-我想了解有关 haskell 的 -> 运算符的更多信息。我不太清楚它在多大程度上模糊了特殊语法和某种类型类之间的界限,我想做一些研究。具体来说,我见过这样的事情: instance Monad ((-6ren">
gpt4 book ai didi

haskell - 在哪里可以阅读 haskell "->"运算符?

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

我想了解有关 haskell 的 -> 运算符的更多信息。我不太清楚它在多大程度上模糊了特殊语法和某种类型类之间的界限,我想做一些研究。具体来说,我见过这样的事情:

instance Monad ((->) r) where ...

这引起了我的兴趣。

但是,当我尝试搜索“haskell arrow”或“haskell function”或“haskell class function”时,我遇到了获取 Control.Arrow 或简单类型结果的明显问题类(class)辅导。

-> 叫什么?在哪里可以阅读更多相关信息?

最佳答案

(->)通常被称为“函数箭头”或“函数类型构造函数”,虽然它确实有一些特殊的语法,但并没有那么特别。

它本质上是一个中缀类型运算符。给它两种类型,它就会为您提供这些类型之间的函数类型。就像 2 + 3(+) 2 3 的语法糖,from -> to 也是如此(->) from to 的语法糖。你可以把它想象成 Function from to如果符号令人困惑。

也就是说,你提到的实例可以理解为

instance Monad (Function from) where ...

这清楚地表明我们正在讨论采用某种任意(但固定)类型的参数的函数。事实上,这个 monad 实例可以在 Control.Monad.Instances 中找到。它本质上与 the Reader monad 相同.

查看 the source ,这真的很简单:

instance Monad ((->) r) where
return = const
f >>= k = \ r -> k (f r) r

return 给出的平凡值忽略该参数,并且 (>>=)运算符分配参数 r向两侧。

还值得注意的是,在相应的 Applicative 中函数实例,pure(<*>)对应于 the SKI combinator calculus 的 K 和 S 组合子。

(->)也可以概括为 Arrow type class 。箭头简介can be found here .

最后,请注意符号 ->也出现在语法的其他或多或少不相关的部分中,包括 lambda 抽象 \x -> ... , case 表达式 case ... of x -> ...等反向符号<-也发生在几个不相关的上下文中。不要将它们与功能箭头混淆。

关于haskell - 在哪里可以阅读 haskell "->"运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9136421/

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