在Haskell中对数据类型和值构造函数使用相同的名称是否常见?

haw*_*eye 9 haskell typeclass

查看以下代码:

data Point = Point Float Float deriving (Show)  
data Shape = Circle Point Float | Rectangle Point Point deriving (Show)  
Run Code Online (Sandbox Code Playgroud)

这本书的代码示例附带以下文字:"了解你是一个很好的Haskell"一书:

请注意,在定义点时,我们对数据类型和值构造函数使用相同的名称.这没有特殊含义,但如果只有一个值构造函数,则通常使用与该类型相同的名称.

现在我的假设是data Point = ...数据类型,并且... = Point Float...是值构造函数.

我的问题是:在Haskell中对数据类型和值构造函数使用相同的名称是否常见?

use*_*541 9

根据我有限的经验:是的.这也是有道理的.你为什么要Point在这里打电话?它完美地描述了数据类型,并且也清楚地用于这样的模式匹配

myFunc :: Point -> Bool
myFunc (Point 0 0) = True
myFunc _ = False
Run Code Online (Sandbox Code Playgroud)

它是明确的,因为您只能将数据类型放在函数的类型签名中.

  • 它确实很有意义.一个缺点是初学者首先学习语言有点令人困惑 - 很难理解"Point"在不同的语境中代表两种不同的东西.这不应该影响您在项目或工作中编写代码的方式,但如果您需要围绕Haskell设计入门课程,请记住这一点. (2认同)