TareaHaskell.hs:36:69:错误:解析输入')'上的错误

vig*_*a11 -1 parsing haskell input

这是我第一次尝试Haskell。我正在尝试制作一个函数,该函数带有一个元素和一个列表,并删除该项目的第二种外观。例如,如果元素为2且列表为,[2,3,4,2,5,2]则结果为[2, 3, 4, 5, 2]

但是我收到此错误:

TareaHaskell.hs:36:69: error: parse error on input ‘)’
   |
36 |     | ( (a == x) && not (isItIn x newList) ) = ( (let newList = x:[]) && (deleteSecond a xs) ) 
Run Code Online (Sandbox Code Playgroud)

码:

isItIn :: (Eq a ) => a -> [a] -> Bool
isItIn a [] = False
isItIn a (x:xs) = if a == x
                  then True
                  else isItIn a xs

deleteSecond :: (Eq a ) => a -> ( [a] -> [a] )
deleteSecond a [] = newList
deleteSecond a (x:xs)
    | ( (a == x) && not (isItIn x newList) ) = ( (let newList = x:[]) && (deleteSecond a xs) )
    | (a == x) && (isItIn x newList) = (deleteSecond a xs)
    | otherwise = let newList = x:[] && deleteSecond a xs
Run Code Online (Sandbox Code Playgroud)

我读到它可能是缩进的问题,但是我已经尝试过使用空格,来回移动它,但仍然无法正常工作。我还使用Notepad ++和Sublime来帮助缩进,什么也没做。

Rob*_*ond 6

问题是解析器不希望)在此代码中使用:

(let newList = x:[])
Run Code Online (Sandbox Code Playgroud)

因为在Haskell中具有let后跟的语句是无效的in。(除了do块内。)

我真的不清楚您的实际意图是什么,但其目的只是let在代码块中给一个更复杂的表达式一个临时名称。一个let没有附带声明in没有任何意义,在此导致您解析错误。