我在哪里可以阅读haskell“ - >”运营商?

时间:2012-02-03 22:32:01

标签: haskell

我想了解更多有关haskell的->运算符的信息。我不是很清楚它在特殊语法和某种类型类之间的界限是多么模糊,而且我想做一些探讨。具体来说,我见过这样的事情:

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

这激起了我的兴趣。

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

什么是->,我在哪里可以阅读更多信息?

2 个答案:

答案 0 :(得分:36)

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

它本质上是一个中缀类型的运算符。给它两种类型,它给你这些类型之间的函数类型。就像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 abstractions \x -> ...,case expressions case ... of x -> ...等。反向符号{ {1}}也出现在几个不相关的上下文中。不要将这些与功能箭头混淆。

答案 1 :(得分:0)

我认为称为箭头。根据“Real World Haskell”:

  

- &GT;只有一个含义:它表示一个函数,它接受左侧类型的参数并返回右侧类型的值。