运算符(:>)在数据构造函数中的含义是什么?

时间:2013-10-05 11:34:33

标签: haskell constructor

有谁知道':>'的含义是什么?以下代码中的构造函数:

data Rose a = a :> [Rose a]
    deriving (Eq, Show)

1 个答案:

答案 0 :(得分:25)

在Haskell中,默认情况下名称由字母数字字符组成的函数是前缀,而由+>$等字符组成的函数默认为中缀。例如,您可以定义像

这样的中缀函数
Prelude> let a $%^ b = a + b
Prelude> :t ($%^)
($%^) :: Num a => a -> a -> a

同样适用于构造函数(编辑:正如@ChrisTaylor正确指出的那样,其中包含中缀构造函数的名称必须以:开头)。这条线

Prelude> data Rose a = a :> [Rose a]

表示:>是一个带有两个参数的构造函数:

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

你也可以创建一个看起来很正常的构造函数

data Rose a = RoseCtr a [Rose a]

具有相同的类型。在某些情况下,中缀函数/构造函数更直观,使代码更容易理解。