infix操作符在Haskell中做了什么?

我正在阅读Haskell的一个温柔的介绍 (它不是那么温和),并且它反复使用:操作符,而不直接解释它做了什么。

那么,它究竟做了什么?

:是“前置”操作符:

 x : xs 

返回一个列表,其中x为第一个元素,后面是xs的所有元素。 在其他函数式语言中,这通常称为cons ,因为它通过从空列表重复应用recursion地构造列表:

 1 : 2 : 3 : 4 : [] 

是名单[1, 2, 3, 4]

可以随时查看GHCi / HUGS中的types,因为本教程的第一步鼓励您下载GHC / HUGS。

 Prelude> :t (:) (:) :: a -> [a] -> [a] Prelude> :t (++) (++) :: [a] -> [a] -> [a] 

从它们各自的types来看,推断它们的用法是相当容易的。

PS: http : //haskell.org/hoogle/真棒。

Haskell中的:运算符是列表的构造函数。 它将“冒险”之前的任何内容排除在指定的列表之后。

例如,一个整数列表是通过将每个数字“包括”到空列表中来完成的,例如,

列表[1,2,3,4]可以如下构造:

  • 4 : [] (将4列入空列表)
  • 3 : [4] (包含3的列表包含4)
  • 2 : [3,4] (将2列入包含2 : [3,4]的列表)
  • 1 : [2,3,4] (包含2,3,4的列表1)

给你;

 [1,2,3,4] 

写得完全是这样;

 1 : 2 : 3 : 4 : [] 

它是列表的types构造函数。 除了它是中缀之外,它与其他任何types的构造函数(如JustLeft )没有区别。 有效的types构造函数可以是以大写字母开头的单词,也可以是以冒号开头的符号。

所以你可以为你自己的数据types定义中缀构造函数。 例如:

 data MyList a = a :> MyList a | Empty 

在上面的代码中,我们用两个构造函数定义了一个名为MyList的types:第一个是看起来很古怪的构造函数:>它接受一个元素,另一个MyList a ; 第二个是空的构造函数Empty ,相当于Haskell本地列表中的[]

以上相当于:

 data MyList a = Cons a (MyList a) | Empty