我查看了每个关于此错误消息的线程并尝试了所有内容,但它一直在破坏编译器。 我的代码:
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
子句中,则解析错误位于不同的位置,这非常令人沮丧。
答案 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