【发布时间】:2019-04-23 01:24:18
【问题描述】:
我正在使用 Haskell 中的代数类型,从工作表中做一些练习。我做了以下练习:
- 定义一个代数类型 Point 来表示二维空间中的点(坐标)。
我的练习代码:
data Point = Point Float Float
deriving (Show)
- 使用 Point,定义 Shape 数据类型的修改版本 PositionedShape 除了尺寸之外,还包括形状的中心点。
先前定义的形状数据:
data Shape = Circle Float |
Rectangle Float Float
deriving (Show)
我的练习代码:
data PositionedShape = PositionedShape Shape Point
deriving (Show)
现在我的问题出现在这个问题上:
定义一个函数:
haskell move :: PositionedShape -> Float -> Float -> PositionedShape将形状移动给定的 x 和 y 距离
我的实现如下:
move :: PositionedShape -> Float -> Float -> PositionedShape
move (Shape (Point x y)) newX newY = Shape (Point newX newY)
这将返回此错误:
Week8.hs:103:7:错误:不在范围内:数据构造函数“Shape” 失败,已加载模块:无。
谁能解释一下为什么会出现这个错误,我该如何解决?我对代数类型有点困惑,我尝试了很多东西,但似乎我无法找到解决方案。
【问题讨论】:
标签: haskell algebraic-data-types