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

Haskell中的一个数据与两个数据,haskell,Haskell,有什么大区别吗 data Point = IntPoint Int Int | FloatPoint Float Float 结束 这取决于你想用它做什么 data Point = IntPoint Int Int | FloatPoint Float Float 在这里,相同类型的Point有两个数据构造函数IntPoint和FloatPoint。例如,您可以编写一个函数,该函数接受类型为Point的值,并根据它是IntPoint还是FloatP

有什么大区别吗

data Point = IntPoint Int Int
           | FloatPoint Float Float
结束


这取决于你想用它做什么

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
有几种方法可以使用TypeClass为上述情况编写多态函数,但那是另一回事

isDiagonalInt :: IntPoint -> Bool
isDiagonalInt (IntPoint i j) = i == j

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