我找到了以下示例here
instance Monad Maybe where
Nothing >>= f = Nothing
(Just x) >>= f = f x
return = Just
return
方法是以pointfree方式定义的,我知道它适用于函数,但是这里我们有一个数据构造函数,其声明语法看起来与函数不同,更不用说它的用途。
另一个教程says:
数据构造函数是Haskell中的第一类值,实际上有一个类型。例如,类型 剩下 的构造函数 或 数据类型是:
左:forall b a。 a - >要么是b
作为第一类值,它们可以传递给函数,保存在列表中,是其他代数数据类型的数据元素等等。
所以任何人都可以明确说明数据构造函数是什么以及它们与函数的区别(如果有的话)。
答案 0 :(得分:5)
至少一个特定的区别是数据(值)构造函数可以用于模式匹配,而非数据构造函数的函数则不能。这是我能想到的唯一真正的区别,除了“nullary”数据构造函数(想想Nothing
)是, nullary 这一事实。
答案 1 :(得分:0)
数据构造函数只是一个减少eta的函数:
Just === \x -> Just x
Left === \x -> Left x
但是Nothing
是一个没有参数的函数