【发布时间】:2014-10-19 00:14:41
【问题描述】:
假设我有一个类型,其中包含定义为的各种对象的坐标:
type Point = (Int, Int)
data Object = A Point
| B Point
| C Point
我想创建一个函数来检查对象的重叠,就像这样
checkOverlap:: Object -> Point -> Bool
我只想定义一个适用于所有对象的函数,而不必指定“checkOverlap (A point) (x,y)”、“checkOverlap (B point) (x,y)”等。
我已经用谷歌搜索了这个问题,但我能找到的唯一解决方案是添加一个中间类型,该类型将收集所有不同的对象,以便您可以对该类型进行模式匹配。然而,由于这是一个家庭作业,我不允许修改大块代码来适应这种新类型。
还有其他方法吗?甚至可能没有模式匹配。不得不多次复制同一个函数似乎是糟糕的编程。
【问题讨论】:
-
你想使用类型类;然后将每个对象关联到一个“点”列表;然后为每个对象定义此类型类的实例,然后您的
checkOverlap函数可以使用类型约束,例如:checkOverlap :: (HasPoints ob) => obj -> Point -> Bool。
标签: haskell types pattern-matching