有什么大的区别:

data Point = IntPoint Int Int
           | FloatPoint Float Float

超过
data IntPoint = IntPoint Int Int
data FloatPoint = FloatPoint Float Float

最佳答案

这取决于你想用它做什么。

data Point = IntPoint Int Int
           | FloatPoint Float Float

这里相同类型的 Point 有两个数据构造函数 IntPointFloatPoint 。例如,您可以编写一个函数,该函数采用 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

这里 IntPointFloatPoint 是单独的类型,分别以 IntPointFloatPoint 作为数据构造函数。现在您必须为每种类型编写具有不同名称的单独函数。
isDiagonalInt :: IntPoint -> Bool
isDiagonalInt (IntPoint i j) = i == j

isDiagonalFloat :: FloatPoint -> Bool
isDiagonalFloat (FloatPoint i j) = i == j

有一些方法可以使用类型类为上述情况编写多态函数,但那是另一回事了。

10-06 02:43