如何取消用户定义的整数?

时间:2018-06-27 12:35:37

标签: haskell

我有

data Weight = Fin Integer | Inf
    deriving (Eq, Ord, Show)

negate :: Weight -> Weight
negate Inf = error "negative infinity not supported"

我想要negate Fin (-1) = Fin 1。所以我进一步定义

negate Fin x = Fin (0 - x)

但这会导致错误

? Equations for ‘negate’ have different numbers of arguments

我该如何解决?谢谢!

1 个答案:

答案 0 :(得分:3)

您需要使用方括号来进行模式匹配:

negate (Fin x) = Fin (0 - x)

否则,您似乎有两个参数。

这反映在错误中:““求反”的方程具有不同数量的参数”。

这不适用于Inf,因为它没有参数。