當我使用 import 陳述句時,我無法在 import 陳述句之前縮進函式,例如:
import Data.Char
example = isLower
這運行良好,但如果我寫:
import Data.Char
example = isLower
我收到以下錯誤:輸入“示例”時決議錯誤。(我是否使用制表符或空格縮進)
但是,如果我根本不使用 import 陳述句,我可以按照我喜歡的方式縮進函式
我想知道為什么會發生這種情況,以及是否有辦法解決這個問題。提前致謝
uj5u.com熱心網友回復:
因為您在第一個 import 陳述句中設定了頂級縮進規范,而 ghc 期望其余的頂級陳述句都在該級別上。
換句話說,它是匯入陳述句還是其他任何東西都沒有關系。重要的是它是檔案中的第一條陳述句,并且第一條陳述句設定了頂級陳述句所期望的規范/位置。
考慮以下示例:
example = "hello"
example2 = "good"
如果你把它放在一個檔案中同時兩行都縮進,上面的編譯就好了。但下面沒有:
example = "hello"
example2 = "good"
您可能已經檢查過以下內容也可以編譯:
import Data.Char
example2 = "good"
因為第一個陳述句和下一個陳述句都在同一級別上。
GHC 的這個屬性使您能夠縮進代碼以獲得最大的可讀性,當然在合理范圍內,這意味著它必須對編譯器有意義。
但它有時也會令人困惑,因為它給了你如此多的力量。
uj5u.com熱心網友回復:
粗略地說,當我們遇到縮進或縮進較少的行(或到達檔案末尾)時,代碼行“結束”。
例如
aaa
bbb
ccc
被決議為三行,而
aaa
bbb
ccc
相當于
aaa bbb ccc
特別是,
import Data.Char
example = isLower
相當于
import Data.Char example = isLower
這是一個決議錯誤。
相似地,
import Data.Char
example :: Char -> Bool
example = isLower
方法
import Data.Char example :: Char -> Bool example = isLower
這也是一個決議錯誤。
添加顯式分號可以強制一行“結束”并允許不同的縮進,但這不是一種常見的樣式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/389052.html
標籤:哈斯克尔
上一篇:如何在Haskell中使用自定義資料型別中的語法和訪問值?
下一篇:C的指標問題
