输入“|”的解析错误

Parse error on Input '|'

我查看了关于此错误消息的每个线程并尝试了所有方法,但它一直在扰乱编译器。 我的代码:

check2 :: Slot -> Slot -> Bool
check2 c1 c2 = if (getTime c1 == getTime c2) | (getSubject c1 == getSubject c2)
                then False
                else True

它抛出了一个很好的 error: parse error on input ‘|’

澄清:所有制表符都是 8 个空格 您可能会猜到,该方法是更大方法的一部分,最初位于 where 子句中。如果我把它放在 where 子句中,解析错误在不同的地方,这非常令人沮丧。

您应该使用 ||(二进制逻辑或运算符,与 Java 相同)而不是 |

您可以这样更直接地编写函数:

check2 :: Slot -> Slot -> Bool
check2 c1 c2 = not ((getTime c1 == getTime c2) || (getSubject c1 == getSubject c2))

| 用于定义带有条件的函数。比如你自己的函数也可以定义为:

check2 :: Slot -> Slot -> Bool
check2 c1 c2 | (getTime c1 == getTime c2) || (getSubject c1 == getSubject c2) = False
             | otherwise                                                      = True