簡體   English   中英

do和let ..in語句中的haskell縮進問題

[英]haskell indentation issue with do and let ..in statements

我嘗試了多種組合來修復以下代碼的縮進,但失敗了。 我該如何解決以下問題

fold' list = do
    let result = foldl (+) list
    in putStrLn $ "Reduced " ++ show(result)
    return $ result

 parse error on input `in'
Failed, modules loaded: none.

do子句中不應使用in關鍵字

因此,您可以通過編寫來解決此問題:

fold' list = do
    let result = foldl (+) list
    putStrLn $ "Reduced " ++ show(result)   -- no "in" keyword
    return $ result

let語句的范圍是其余子句。

翻譯就像在Haskell報告 [link] 第3.14節中指定的那樣:

 do {e} = e do {e;stmts} = e >> do {stmts} do {p <- e; stmts} = let ok p = do {stmts} ok _ = fail "..." in e >>= ok do {let decls; stmts} = let decls in do {stmts} 

因此,如果我們定義兩個具有相同名稱的let語句( 建議使用),則第一個移到頂部的語句將起作用。

因此對於:

foo = do
    let x = "4"
    putStrLn x
    let x = "2"
    putStrLn x

它將轉換為:

foo = let x = "4" in (putStrLn x >> (let x = "2" in putStrLn x))

因此,第一個putStrLn將使用x由下式定義let x = "4" ,而最后一個將使用x中所定義let x = "2"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM