0
我想在haskell中使用where和let-in子句聲明局部變量(這是在haskell情況下的正確術語?)。然而,每當我的條款是不是一個單一的線長,我總是得到一些解析錯誤:Haskell中let和in子句的正確語法
> letExample :: Int -> Int
> letExample 0 = 0
> letExample n =
> let one = 1
> four = 4
> eight = 8
> in one*four*eight
當試圖在上面的代碼加載到ghci中我得到以下錯誤:
letexample.lhs:4:33:
parse error in let binding: missing required 'in' Failed, modules loaded: none.
我
whereexample:5:57: parse error on input ‘=’
Failed, modules loaded: none.
代碼:
0123試圖加載下面的代碼時出現以下錯誤> whereExample :: Int -> Int
> whereExample 0 = 0
> whereExample n = one * four * eight
> where one = 1
> four = 4
> eight = 8
在上述情況下使用let和where的正確方法是什麼?
您的發佈代碼混合了製表符和空格,GHC將製表符視爲8個空格,並且這會打破縮進。我建議打開警告'-Wall',這樣編譯器就會報告這個警告,所以你知道有什麼問題。一個簡單的解決方案是避免製表符。有關更多解決方案,請參閱http://dmwit.com/tabs/ – chi
**從不**混合選項卡和空格。它會在所有語言縮寫顯着的語言中打破代碼。檢查您的編輯器設置,並始終只使用製表符或僅使用空格(後者通常是首選)。 – Bakuriu
爲了記錄,在StackOverflow上顯示的這些示例看起來具有完全正確的佈局和語法。 –