我在这里找到了以下示例
instance Monad Maybe where
Nothing >>= f = Nothing
(Just x) >>= f = f x
return = Just
Run Code Online (Sandbox Code Playgroud)
该return方法以pointfree样式定义,我知道它适用于函数,但是这里我们有一个数据构造函数,其声明语法看起来与函数不同,更不用说它的用途了.
另一个教程说:
数据构造函数是Haskell中的第一类值,实际上有一个类型.例如,Either数据类型的Left构造函数的类型是:
左:: forall b a.a - > ab
作为第一类值,它们可以被传递给函数,保存在列表中,是其他代数数据类型的数据元素等等.
因此,任何人都可以清楚地知道数据构造函数是什么以及它们与函数的区别(如果有的话).
至少一个特定的区别是数据(值)构造函数可以用于模式匹配,而非数据构造函数的函数则不能.它是唯一真正的区别我能想到的,比一个事实,即"零元"的数据构造(认为其他Nothing)是,好,零元.