Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 我在哪里可以读到哈斯克尔的文章-&燃气轮机&引用;操作人员_Haskell - Fatal编程技术网

Haskell 我在哪里可以读到哈斯克尔的文章-&燃气轮机&引用;操作人员

Haskell 我在哪里可以读到哈斯克尔的文章-&燃气轮机&引用;操作人员,haskell,Haskell,我想了解更多关于haskell的->操作符的信息。我不太清楚它在多大程度上模糊了特殊语法和某种类型类之间的界限,我想做一些探索。具体来说,我见过这样的事情: instance Monad ((->) r) where ... 这引起了我的兴趣 然而,当我尝试搜索“haskell arrow”或“haskell function”或“haskell class function”时,我遇到了一个明显的问题:获取Control.arrow或简单类型类教程的结果 什么叫->,我在哪里可以读到更

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

instance Monad ((->) r) where ...
这引起了我的兴趣

然而,当我尝试搜索“haskell arrow”或“haskell function”或“haskell class function”时,我遇到了一个明显的问题:获取
Control.arrow
或简单类型类教程的结果

什么叫
->
,我在哪里可以读到更多关于它的信息?

我想它叫箭头。根据“”:

->只有一种含义:它表示一个函数,该函数接受左侧类型的参数并返回右侧类型的值

(>)
通常被称为“函数箭头”或“函数类型构造函数”,虽然它有一些特殊的语法,但并没有太多特殊之处

它本质上是一个中缀类型的操作符。给它两种类型,它会给你这些类型之间的函数类型。就像
2+3
(+)23
的语法糖一样,
from->to
也是
(>)from to
的语法糖。如果符号混淆,您可以将其视为
函数from to

换句话说,您提到的实例可以理解为

instance Monad (Function from) where ...
这清楚地表明,我们所讨论的函数接受一些任意(但固定)类型的参数。事实上,这个monad实例是在中找到的,它本质上与

看,其实很简单:

instance Monad ((->) r) where
  return = const
  f >>= k = \ r -> k (f r) r
给出的平凡值返回
忽略参数,
(>>=)
操作符将参数
r
分配给两边

还值得注意的是,在函数的相应
应用
实例中,
()
对应于函数的K和s组合符

(>)
也由。箭头简介


最后,请注意符号
->
也出现在语法的其他或多或少不相关的部分中,包括lambda抽象
\x->…
,case表达式
case。。。表示x->…
等。反面符号
注意:应该是
实例Monad((->)r)
(>)
接受两个类型参数,而
Monad
只接受一个类型参数,因此您需要首先部分应用它。这是在类型签名中,但OP谈论的是一个函数—一如既往的好答案。然而,有人可能会争辩说,lambda表达式中的->与类型运算符的关系比人们想象的要大。当然,
(\a->b)c
是a->b的案例c,反之亦然。