查看以下代码:
data Point = Point Float Float deriving (Show)
data Shape = Circle Point Float | Rectangle Point Point deriving (Show)
来自“了解大家的Haskell”一书,该代码示例附带以下文字:
请注意,在定义点时,我们对数据类型和值构造函数使用相同的名称。这没有特殊含义,但如果只有一个值构造函数,则使用与该类型相同的名称是很常见的。
现在我的假设是data Point = ...
是数据类型,... = Point Float...
是值构造函数。
我的问题是:在Haskell中对数据类型和值构造函数使用相同的名称是否常见?
答案 0 :(得分:9)
根据我有限的经验:是的。这也是有道理的。为什么你会在这里以不同的方式致电Point
?它完美地描述了数据类型,并且还可以用于模式匹配,如此
myFunc :: Point -> Bool
myFunc (Point 0 0) = True
myFunc _ = False
这是明确的,因为您只能将数据类型放在函数的类型签名中。
答案 1 :(得分:1)
这不是直接答案,而是针对有相同问题的人的提示。
语法突出显示可能有助于区分两者。例如,前面提到的一些代码的屏幕快照,来自带有a Haskell Syntax Highlighting extension(带有自定义颜色编码)的Visual Studio Code:
顺便说一下,并非所有人似乎都同意接受的答案。例如,请参见this short post以及有关this r/haskell discussion的信息。