输入' |'上的解析错误

时间:2017-05-22 18:29:16

标签: haskell if-statement where-clause

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

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子句中,则解析错误位于不同的位置,这非常令人沮丧。

1 个答案:

答案 0 :(得分:7)

您应该使用||(二进制逻辑或运算符,与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