Haskell添加了自定义数据类型

Luc*_*nes 3 haskell

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

鉴于:

data Year = Year Integer
Run Code Online (Sandbox Code Playgroud)

我如何允许添加,例如(Year 2000) + 10哪些会返回Year 2010

我试过了

instance Num Year where
    (Year a) + (b) = Year (a + b)
Run Code Online (Sandbox Code Playgroud)

但那没用.试过其他几个,但我认为这是最明显的解决方案.

谢谢你的帮助.

ick*_*fay 6

Num定义+如下:

(+) :: a -> a -> a
Run Code Online (Sandbox Code Playgroud)

所以左右两侧+必须是同一类型.您正在尝试定义Num不是这种情况的实例.如果你愿意,你可以+在两个方面做一些工作Year:

Year a + Year b = Year (a + b)
Run Code Online (Sandbox Code Playgroud)

但是如果你想能够添加,比如a Year和a Integer,你需要使用不同的运营商名称,例如:

Year a +++ b = Year (a + b)
Run Code Online (Sandbox Code Playgroud)

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