无法与Double匹配整数? - 创建一个矩形

时间:2018-03-30 10:53:03

标签: haskell

shapeToPic :: Shape -> Picture
shapeToPic (Line a b) = polyline [a, b]
shapeToPic (Rectangle a b) = rectangle a b

形状由

定义
data Shape = Rectangle Side Side
       | Ellipse   Side Side
       | Polygon   [Point]
       | Line      Point Point
 deriving (Show)

我得到错误:

  

<interactive>:55:41: error: * Couldn't match type(整数,整数)&#39;使用Double' Expected type: Side Actual type: (Integer, Integer) * In the second argument of矩形&#39;,即(5, 7)' In the first argument of shapeToPic&#39;,即           (Rectangle (3, 3) (5, 7))' In the first argument of drawingOf&#39;,即           `(shapeToPic(矩形(3,3)(5,7)))&#39;

Haskell有点新鲜,我知道我需要放一个&#39; Side&#39;类型为矩形需要2分,但不确定问题是什么。我有2分?任何帮助解决这个问题都将非常感谢!

2 个答案:

答案 0 :(得分:1)

看起来Side被定义为Double,而不是一对。因此,Rectangle 13.45 12.32可以,而Rectangle (x1,y1) (x2,y2)则不行。

显然,“矩形”形状仅包含宽度和高度,但不包含“原点”。这很奇怪,因为线和多边形确实包含Shape类型的原点。这看起来像是潜在的设计不一致。

您应该在问题中提供Side的定义,否则我们只能推测。

答案 1 :(得分:0)

也许你用逗号制作了拼写错误的点?

let x = (1.1) :: Double -- type checks
let x = (1,1) :: Double -- same error