有什么大不同:
data Point = IntPoint Int Int
| FloatPoint Float Float
在
data IntPoint = IntPoint Int Int
data FloatPoint = FloatPoint Float Float
答案 0 :(得分:12)
这取决于你想用它做什么。
data Point = IntPoint Int Int
| FloatPoint Float Float
此处,相同类型Point
有两个数据构造函数IntPoint
和FloatPoint
。例如,您可以编写一个带有Point
类型值的函数,并对其执行某些操作,具体取决于它是IntPoint
还是FloatPoint
。这是一个示例函数,用于检查连接原点和点的线是否与x轴形成45度。
isDiagonal :: Point -> Bool
isDiagonal (IntPoint i j) = i == j
isDiagonal (FloatPoint i j) = i == j
另一方面,
data IntPoint = IntPoint Int Int
data FloatPoint = FloatPoint Float Float
此处IntPoint
和FloatPoint
分别是IntPoint
和FloatPoint
的数据构造函数。现在,您必须为每种类型编写具有不同名称的单独函数。
isDiagonalInt :: IntPoint -> Bool
isDiagonalInt (IntPoint i j) = i == j
isDiagonalFloat :: FloatPoint -> Bool
isDiagonalFloat (FloatPoint i j) = i == j
有很多方法可以使用类型类为上述情况编写多态函数,但这是另一个故事。