Haskell 列表理解中的生成器不起作用

Tom*_*net 1 syntax haskell list-comprehension syntax-error

我正在尝试生成一个列表,其中将包含我正在尝试解决的问题的解决方案列表。我正在使用列表理解来执行此操作,生成所有可能的组合,然后使用谓词进行过滤,以便仅包含解决方案。这是我的代码。

solveRow :: Row -> [Row]
solveRow (Row target rowCells) =
    [(cellsToRow target cls) | (cls <- (cellPermutations rowCells)), (result cls)==target]
Run Code Online (Sandbox Code Playgroud)

cellPermutations返回[[Cell]],因此cls应该是类型[Cell]。当我尝试编译时出现错误。

在此处输入图片说明

我认为<-将右侧的每个元素(在这种情况下[Cell])传递给左侧变量。为什么我会收到解析错误<-

bra*_*drn 6

不要用括号括起来cls <- (cellPermutations rowCells)——这是一个语法错误。您也不需要括号cellsToRow target cls,尽管这样做不是错误。(严格来说,你也不需要括号result cls,但我个人认为这些括号使它更具可读性。)所以你的例子应该是:

solveRow :: Row -> [Row]
solveRow (Row target rowCells) =
    [cellsToRow target cls | cls <- (cellPermutations rowCells), (result cls)==target]
Run Code Online (Sandbox Code Playgroud)