输入'|'上的解析错误

Sha*_*sum 1 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
Run Code Online (Sandbox Code Playgroud)

它扔得很好 error: parse error on input ‘|’

澄清:所有选项卡都是8个空格正如您可能猜到的,该方法是更大方法的一部分,where最初是在一个子句中.如果我将它放在where子句中,则解析错误位于不同的位置,这非常令人沮丧.

Rom*_*cía 7

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

您可以通过以下方式更直接地编写函数:

check2 :: Slot -> Slot -> Bool
check2 c1 c2 = not ((getTime c1 == getTime c2) || (getSubject c1 == getSubject c2))
Run Code Online (Sandbox Code Playgroud)

|用于用条件来定义功能.例如,您自己的函数也可以定义为:

check2 :: Slot -> Slot -> Bool
check2 c1 c2 | (getTime c1 == getTime c2) || (getSubject c1 == getSubject c2) = False
             | otherwise                                                      = True
Run Code Online (Sandbox Code Playgroud)