Haskell中的一个数据与2个数据

时间:2013-08-25 03:45:24

标签: haskell

有什么大不同:

data Point = IntPoint Int Int
           | FloatPoint Float Float

data IntPoint = IntPoint Int Int
data FloatPoint = FloatPoint Float Float

1 个答案:

答案 0 :(得分:12)

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

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

有很多方法可以使用类型类为上述情况编写多态函数,但这是另一个故事。