我应该如何缩进嵌套的case表达式?

时间:2014-03-04 08:55:26

标签: haskell indentation

如何正确缩进haskell中嵌套的case表达式,它在命令式编程中会像嵌套循环一样?

f x y = case x of
     1 -> case y of 
          1 -> 
          2 -> 
          ...        
     2 -> case y of 
       ...

编译器在第二个x情况的开头给我一个缩进错误,所以我猜它不明白第一个x的情况已经结束了

3 个答案:

答案 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)

我遇到了同样的问题,这是因为我使用标签进行识别。当我用空格缩进代码时,它工作了!