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