在输入“=”解析器时出现解析错误,即使我的缩进看起来是正确的

Getting parse error on input ‘=’parser, even if my indentation seems correct

我是 Haskell 的新手,我正在尝试创建一些小算法来理解 Haskell 的语法, 我正在尝试编写和编译快速排序算法,但它在编译时给我一个错误。

quicksort [] = []
 quicksort (x:xs) = quicksort small ++ (x : quicksort large)
   where small = [y | y <- xs, y <= x]
         large = [y | y <- xs, y > x]

谁能帮我理解为什么我在代码的第二行出现这个错误。 parse error on input ‘=’parser.

谢谢,

我也是这个平台的新手,所以如果我不够清楚或者我需要改进我的问题,请在评论中告诉我。

意图在 haskell 中很重要。我可以用

重现你的错误
quicksort [] = []
 quicksort (x:xs) = quicksort small ++ (x : quicksort large)
   where small = [y | y <- xs, y <= x]
         large = [y | y <- xs, y > x]

.code.tio.hs:2:19: error: parse error on input ‘=’ Perhaps you need a 'let' in a 'do' block?

但是当你删除第二个 quicksort 之前的 space 时,它编译正常。

从技术上讲,您可以在使用 {}; 时使用任何意图。 不推荐这样做, 因为您将很难找到需要牙套的确切位置,而且例子很少。 (“稀有”如“濒危物种”/“几乎灭绝”)

{
quicksort [] = [];
 quicksort (x:xs) = quicksort small ++ (x : quicksort large) -- no `;` before `where`
   where {small = [y | y <- xs, y <= x];
         large = [y | y <- xs, y > x]};
main = print . quicksort $ "hello"
}