0
我有一个看起来像这样的类型,我想compare
函数只考虑整数的大小。Haskell实例Ord困难
data Cell = FromLeft Coordinate Int
| FromTop Coordinate Int
| FromDiagonal Coordinate Int
| Empty Coordinate
deriving (Eq, Read, Show)
下面的代码工作,但我宁愿东西更优雅
instance Ord Cell where
compare (FromLeft _ x) (FromLeft _ y) = compare x y
compare (FromRight _ x) (FromLeft _ y) = compare x y
[...]
这不是一个好的Ord实例,因为即使它们在“坐标”字段中不同,它们的比较值也是相等的。另外,'Empty'应该如何比较? – leftaroundabout
@leftroundabout是的,你让我意识到'''Ord'''真的不是我所追求的。就像在Haskell中一样,你花费了大量时间来解决类型系统问题,只是意识到你应该一直在倾听它。 – davorb
您可能会考虑为您的Ord实例定义一个新类型,而不是直接在Cell中定义它(就像没有用于任何数值类型的Monoid实例,而是用于Product和Sum的单独实例一样)类型)。 – chepner