20

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

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

1 回答 1

31

在 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]

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

于 2013-10-05T11:49:26.600 回答