解析 case 表达式中的错误 - haskell

问题描述

我收到此代码的解析错误,但不确定原因,请帮助。我对 haskell 也很陌生,所以请原谅这个非常简单的问题。

intDiv a b = case a b of 
    b==0 -> Just(1)
    _ -> nothing

错误信息是:

Q66827743.hs:4:5: error: Parse error in pattern: b == 0
  |
4 |     b==0 -> Just(1)
  |     ^^^^

解决方法

您似乎将 case of 语法与保护语法混为一谈。

使用 case of 时,您不必“保护”布尔表达式;你匹配模式:

intDiv a b = case a b of 
    0 -> Just 1
    _ -> Nothing

这个函数没有多大意义,但它可以编译。

如果你想保护布尔表达式,你也可以这样做,但语法不同:

intDiv a b | b == 0 = Just 1
intDiv _ _ = Nothing

这个变体也可以编译。

请注意,这两个变体等价,因为它们没有相同的(推断)类型。