有什么大的区别吗:
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
超过
data IntPoint = IntPoint Int Int
data FloatPoint = FloatPoint Float Float
这取决于你想用它做什么。
data Point = IntPoint Int Int
| FloatPoint Float Float
这里同一个类型Point
有两个数据构造函数IntPoint
和FloatPoint
. 例如,您可以编写一个接受类型值的函数,Point
并根据它是 anIntPoint
还是 a来处理它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
有一些方法可以使用类型类为上述情况编写多态函数,但那是另一回事。