haskell中缩进规则的完整集合

haskell中缩进规则的完整集合,haskell,coding-style,Haskell,Coding Style,从哪里可以获得Haskell代码编写的完整缩进规则集 过去的SO问题类似于我下面的问题,导致我提出上述问题。错误消息背后的原因是什么:在输入“某物”时解析错误 我收到的错误消息: baby.hs:103:2:输入'myList'时解析错误(此行中的错误) 我试图编译的代码: myList = ["aeroplane", "Aeroplane", "AeRoPlAne", "helicopter", "HELICOPTER", "Zebra"] quicksort :: (Ord a) =>

从哪里可以获得Haskell代码编写的完整缩进规则集

过去的SO问题类似于我下面的问题,导致我提出上述问题。错误消息背后的原因是什么:
在输入“某物”时解析错误

我收到的错误消息:

baby.hs:103:2:输入'myList'时解析错误(此行中的错误)

我试图编译的代码:

myList = ["aeroplane", "Aeroplane", "AeRoPlAne", "helicopter", "HELICOPTER", "Zebra"]
quicksort :: (Ord a) => [a] -> [a]  
quicksort [] = []  
quicksort (x:xs) =
let smallerSorted = quicksort [a | a <- xs, a <= x]  
biggerSorted = quicksort [a | a <- xs, a > x]  
in smallerSorted ++ [x] ++ biggerSorted
myList=[“飞机”、“飞机”、“飞机”、“直升机”、“直升机”、“斑马”]
快速排序::(Ord a)=>[a]->[a]
快速排序[]=[]
快速排序(x:xs)=

让smallerSorted=quicksort[a | a至少对于标准Haskell(无语言扩展),解释布局规则

根据你的口味,报告可能有点正式。关于Haskell的各种教程和教科书对布局规则有一些更非正式的解释,例如

在您的特定情况下,错误消息指向第103行,但您只粘贴了几行。我可以看到,至少let-In构造的缩进被破坏。您应该编写如下内容:

xs = ["aeroplane", "Aeroplane", "AeRoPlAne", "helicopter", "HELICOPTER", "Zebra"]
quicksort :: (Ord a) => [a] -> [a]
quicksort [] = []
quicksort (x:xs) = let smallerSorted = quicksort [a | a <- xs, a <= x]
                       biggerSorted = quicksort [a | a <- xs, a > x]
                   in smallerSorted ++ [x] ++ biggerSorted
xs=[“飞机”、“飞机”、“飞机”、“直升机”、“直升机”、“斑马”]
快速排序::(Ord a)=>[a]->[a]
快速排序[]=[]

快速排序(x:xs)=let smallerSorted=quicksort[a | a如果我理解正确,避免此问题的最简单方法是编写单个
do
let
,如下所示:

fName = do
  expression1 = ...
  exp2 ...

fName param = let
  exp1 = ...
  exp2 = ...
  exp3 = ...
  in ...        -- can be indented more if you want
这里的要点是
exp1
的第一个缩进很容易在每一行中发现和维护




这是我的学习表上的复制/粘贴。虽然不多,但可能对某些人有所帮助。 如果有人发现任何错误/错误,请纠正我

制表符或空格表示块,如C中的{com1;com2}++

越位规则:在源文件的开头,第一个顶级 声明或定义可以在任何列中开始。每个后续的 顶级声明必须具有相同的缩进

输入,它在哪里看到下一个标记的缩进。如果为空 行,或缩进是进一步向右,它继续上一行。 若缩进相同,则这是同一块中新项的开始

win tab 4 spc,unix tab 8空间使用空格代替tab


语言报告,特别是第103行是定义myList的列表吗?它前面的几行是什么?@dave4420先生,我正在学习“Learn-you-a-haskell”并将所有代码示例保存在同一个文件中,即baby.hs。前面几行包括这些代码示例。我仍然不知道如何避免此错误。错误仍然存在。我将xs声明保留到最后一行,然后错误(输入“=”上的分析错误)转移到以下行:biggerSorted=quicksort[a | a x]@Optimight,缩进代码适合我。你使用空格而不是制表符进行缩进,对吗?@Headsink我使用gedit编写代码。是的,我使用制表符但设置为插入空格。一所大学被完全相同的代码片段卡住了,结果是当他将代码从浏览器复制到编辑器时,出现了制表符而不是空格在缩进中。
line1... 
   continue line 1 -- as long it doesn't start at same indent as line1
   3spaces would indicate block with line 1!
   line4 same block
   same indent is same line1 block
   all indents for BLOCK must be same.

line8...    -- is new block and end of line1 block
   positon of first column in block is start

line 1
 cont line1
  cont line 1
   cont line 1
    block1  -- would be cont line 1
    block1  --  if not for this block1 at same indent


Bad way:
do
  action0
  if condition
  then action1
  else action2
  action3

Good way:
do
  action0
  if condition
    then action1
    else action2
  action3