如何正确缩进haskell中嵌套的case表达式,它在命令式编程中会像嵌套循环一样?
f x y = case x of
1 -> case y of
1 ->
2 ->
...
2 -> case y of
...
编译器在第二个x情况的开头给我一个缩进错误,所以我猜它不明白第一个x的情况已经结束了
答案 0 :(得分:6)
不是直接答案,但可能会有所帮助:
在这种特殊情况下,你也可以写:
f 1 1 = ...
f 1 2 = ...
f 2 2 = ...
或,作为案例表达:
f x y = case (x, y) of
(1,1) -> ...
(1,2) -> ...
(2,1) -> ...
答案 1 :(得分:3)
您的代码似乎没问题。 Haskell有一个非常简单的Indenation规则,如wikibooks所述:
作为某个表达式一部分的代码应该进一步缩进 而不是那个表达的开头。
这对我有用:
f x y = case x of
1 -> case y of
1 -> undefined
2 -> undefined
2 -> case y of
1 -> undefined
您可能需要检查编辑器以查看它是否正在进行适当的缩进。正如@Tarmil建议的那样,总是使用空格来缩进。有关here.
的详细信息答案 2 :(得分:0)
我遇到了同样的问题,这是因为我使用标签进行识别。当我用空格缩进代码时,它工作了!