0

我在这里找到了以下示例

instance Monad Maybe where
    Nothing  >>= f = Nothing
    (Just x) >>= f = f x
    return         = Just

return方法以无点样式定义,我知道它适用于函数,但这里我们有一个数据构造函数,其声明语法看起来与函数之一不同,更不用说它的用途了。

另一个教程

数据构造函数是 Haskell 中的第一类值,实际上有一个类型。例如,Either 数据类型的 Left 构造函数的类型是:

左:: forall b a。a -> 要么 ab

作为第一类值,它们可以传递给函数,保存在列表中,成为其他代数数据类型的数据元素等等。

因此,任何人都可以弄清楚数据构造函数是什么以及它们与函数有何不同(如果有的话)。

4

2 回答 2

6

至少,一个具体的区别是数据(值)构造函数可以用于模式匹配,而不是数据构造函数的函数则不能。这是我能想到的唯一真正的区别,除了“nullary”数据构造函数(think Nothing)是nullary的事实。

于 2013-11-04T15:12:13.963 回答
0

数据构造函数只是一个具有 eta-reduction 的函数:

Just === \x -> Just x

Left === \x -> Left x

但是Nothing是一个没有参数的函数

于 2013-11-04T15:19:45.777 回答