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来帮助缩进,什么也没做。
问题是解析器不希望)在此代码中使用:
(let newList = x:[])
Run Code Online (Sandbox Code Playgroud)
因为在Haskell中具有let后跟的语句是无效的in。(除了do块内。)
我真的不清楚您的实际意图是什么,但其目的只是let在代码块中给一个更复杂的表达式一个临时名称。一个let没有附带声明in没有任何意义,在此导致您解析错误。