看下面的代码:
data Point = Point Float Float deriving (Show)
data Shape = Circle Point Float | Rectangle Point Point deriving (Show)
该代码来自《Learn you a Haskell for Great Good》一书,该书将此代码示例与以下文本一起提供:
注意,在定义一个点时,我们对数据类型和值构造函数使用了相同的名称,这并没有什么特别的意义,尽管如果只有一个值构造函数,那么使用相同的名称是很常见的。
现在我假设data Point = ...
是数据类型,... = Point Float...
是值构造函数。
我的问题是:在Haskell中,数据类型和值构造函数使用相同的名称是否常见?
2条答案
按热度按时间5cg8jx4n1#
根据我有限的经验:是的。这也是有意义的。为什么在这里要用不同的方式来调用
Point
呢?它完美地描述了数据类型,并且也很清楚地用于像这样的模式匹配它是明确的,因为您只能将数据类型放在函数的类型签名中。
cfh9epnr2#
这不是一个直接的答案,而是一个提示的人与同样的问题。
语法突出显示可能有助于区分这两者。例如,前面提到的一些代码的屏幕截图,来自Visual Studio Code with a Haskell Syntax Highlighting extension(带有自定义颜色编码):
顺便说一句,并不是每个人都同意这个公认的答案,例如,见this short post,以及this r/haskell discussion。