2014-10-20 69 views
1

我被GHCI的一個奇怪的佈局「功能」咬傷:佈局陷阱或GHCi錯誤?

$ cat > problem.hs 


l = [6 
, 5] 

t = do { putStrLn "line1" 
; putStrLn "line2" } 

當加載到GHCI,我得到與逗號行的錯誤parse error (possibly incorrect indentation or mismatched brackets),但不與分號行。我當時的印象是,括號內的[…]和支撐{…}結構暫停佈局,所以這對我來說是一個驚喜。有人可以告訴我們這是符合Haskell規範的行爲還是僅僅是GHC(i)錯誤?

+4

我敢肯定這是按照Haskell規範。佈局根本不在乎parens或方括號。 – leftaroundabout 2014-10-20 11:30:56

+6

我的理解是'{...}'暫停佈局,但沒有別的。特別是'(...)'和'[']'都不會影響佈局。 – MathematicalOrchid 2014-10-20 11:35:21

回答

1

正如在評論中所討論的,花括號暫停佈局,但沒有其他詞彙結構。要想到這一點,只用於在特定的詞彙位置上花括號的是暫停佈局。有沒有其他的東西影響佈局的構造。 (當然,在其他詞彙位置中使用的花括號具有完全不同的含義,與記錄語法相關)。

+0

「花括號的唯一目的是暫停佈局」。是否有另一種更新記錄的方式,比如'let newRec = oldRec {value = newValue}'? – Mephy 2016-03-14 01:50:15

+0

@Mephy你是對的 - 在另一個詞彙位置他們服務於不同的目的。我相應地編輯了我的答案。 – sclv 2016-03-14 03:15:05