数据构造函数是一个函数吗?

Tri*_*Gao 0 haskell

我在这里找到了以下示例

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

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

因此,任何人都可以清楚地知道数据构造函数是什么以及它们与函数的区别(如果有的话).

Sar*_*rah 5

至少一个特定的区别是数据(值)构造函数可以用于模式匹配,而非数据构造函数的函数则不能.它是唯一真正的区别我能想到的,比一个事实,即"零元"的数据构造(认为其他Nothing)是,好,零元.

  • 我查看它的方式是构造函数是一个函数,解构函数是一个模式匹配的东西,你可以免费获得它看起来像构造函数,但它们是两个不同的东西.也许这只会使事情变得更复杂. (2认同)