只需要在这里解释Haskell的基本语法,因为我显然遗漏了一些东西而且我无法找到解释如何正确执行此操作的任何内容。
假设:
data Year = Year Integer
如何允许添加,例如(Year 2000) + 10
将返回Year 2010
我试过
instance Num Year where
(Year a) + (b) = Year (a + b)
但那并没有奏效。试过其他几个,但我认为这是最明显的解决方案。
感谢您的帮助。
答案 0 :(得分:6)
Num
定义+
,如下所示:
(+) :: a -> a -> a
因此+
的左右两侧必须是同一类型。您正在尝试定义Num
实例,而实际情况并非如此。如果您愿意,可以让+
使用Year
s:
Year a + Year b = Year (a + b)
但是,如果您希望能够添加Year
和Integer
,则需要使用不同的运营商名称,例如:
Year a +++ b = Year (a + b)
(如果您使用此路线,则可能需要为此新运算符定义优先级。)