Haskell添加了自定义数据类型

时间:2014-12-15 05:16:21

标签: haskell

只需要在这里解释Haskell的基本语法,因为我显然遗漏了一些东西而且我无法找到解释如何正确执行此操作的任何内容。

假设:

data Year = Year Integer

如何允许添加,例如(Year 2000) + 10将返回Year 2010

我试过

instance Num Year where
    (Year a) + (b) = Year (a + b)

但那并没有奏效。试过其他几个,但我认为这是最明显的解决方案。

感谢您的帮助。

1 个答案:

答案 0 :(得分:6)

Num定义+,如下所示:

(+) :: a -> a -> a

因此+的左右两侧必须是同一类型。您正在尝试定义Num实例,而实际情况并非如此。如果您愿意,可以让+使用Year s:

Year a + Year b = Year (a + b)

但是,如果您希望能够添加YearInteger,则需要使用不同的运营商名称,例如:

Year a +++ b = Year (a + b)

(如果您使用此路线,则可能需要为此新运算符定义优先级。)