Haskell列表错误

Haskell列表错误,haskell,Haskell,我有这个: varCheck :: Defs -> [Error] nameChecking :: Defs -> Body -> [Error] checkProgram :: Program -> [Error] checkProgram (Program n d b) = do dupE <- varCheck d undefE <- nameChecking d b return undefE ++ dupE 我真的不明白为什么它把被

我有这个:

varCheck :: Defs -> [Error]
nameChecking :: Defs -> Body -> [Error]

checkProgram :: Program -> [Error]
checkProgram (Program n d b)  = do
  dupE <- varCheck d
  undefE <- nameChecking d b
  return undefE ++ dupE
我真的不明白为什么它把被骗当作一个单一的元素。 谢谢

当你有

v <- expr
getLine::IO String
str::String
(我们的monad
m
IO
播放,我们的
a
String
播放)

在您的代码中

dupE <- varCheck d

但是现在您没有使用
,但是显示的错误不在代码中。请发布导致错误的完整代码。还有,为什么要对列表使用
do
符号——这并没有错,但非常罕见。最后,请注意,
returna++b
解析为
(returna)+(b)
,在您的情况下,这相当于
a:b
。Williem:我的错,现在是正确的错误。池:我只是觉得它看起来很整洁,你觉得它怎么样?谢谢你回复的东西,更正了,还是得到了错误,虽然没有用就解决了问题。。。。不知道为什么
str <- getLine
dupE <- varCheck d
checkProgram (Program n d b) = do
  let dupE = varCheck d
  let undefE = nameChecking d b
  undefE ++ dupE
checkProgram (Program n d b) =
  let dupE   = varCheck d
      undefE = nameChecking d b
  in
  undefE ++ dupE
checkProgram (Program n d b) = undefE ++ dupE
  where dupE   = varCheck d
        undefE = nameChecking d b