haskell - 运算符是什么意思(:>) in a data constructor?

标签 haskell constructor

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

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

最佳答案

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

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

关于haskell - 运算符是什么意思(:>) in a data constructor?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19197339/

相关文章:

c++ - 构造函数 Qt C++ 中的枚举

C++:构造函数没有匹配的函数调用?

java - 在Java中如何使用构造函数来初始化不同类的对象?

haskell - 为什么 map 不强制严格,而 zipWith 却强制严格?

haskell - 为什么我不能根据 Haskell 中的比率进行模式匹配?

haskell - 如何避免重新计算具有相同参数的纯函数?

c++ - 构造函数、模板和非类型参数

haskell - 使用命令式编程进行阶乘

haskell - 如何在 Haskell 中显示用户定义的数据类型

c# - 一个类怎么可能没有构造函数呢?