對不起,這個非常基本的問題:在GHCi中,import Library.Name
和:m +Library.Name
之間有區別嗎?它們看起來是相同的,但我認爲這是另一種語法的原因。Haskell庫導入語法
回答
您可能會在源代碼中包含import
,這是更一般的,而:m
是ghci特定的命令(爲了方便起見)。可以使用ghci> :m + Module1 ... ModuleN
加載多個模塊。使用-
而不是+
卸載模塊。由於ghci
是互動的,我會堅持:m
,除非您的工作流程是:編輯您的.hs
文件,保存並重新加載。那麼import
會更合適(並且具有更多特徵,例如qualified imports)。
如果您以後決定使用例如ghc
編譯程序,import
指令也可以工作。你可以有選擇地只導入特定的功能:import Data.List (sort)
只會導入排序,所以會污染名字空間。
你說得對,import Module
和:module + Module
是相同的,但是:module
(此後縮寫爲:m
)語法有幾個原因。
年齡較大。 GHCi真的只是在
IO
do
區塊的內部;現在它支持語言的每個部分,所以我們可以做import
s。 (它看起來像GHCi 6.6.x didn't supportimport
,但是GHCi 6.8.1 did;我們沒有得到完全支持頂層聲明,直到GHCi 7.4.1。)它允許您一次導入多個模塊。
:m + M1 M2 M3
與在新行上分別書寫import M1
,import M2
和import M3
相同。它允許您取消導入模塊:
:m - M
將從提示中的當前範圍中刪除M
的內容。它允許您導入解釋模塊,以便您可以看到整個範圍內的整個。這是當你
:load File.hs
;你發現你在模塊*File
,並可以例如查看File
導入的所有內容,以及它不導出的所有內容。如果您已經加載瞭解釋模塊MI
,那麼您可以使用:m + M1 *MI M3
將M1
和M2
納入到普通方式的範圍內,並將MI
納入範圍的特殊方式。
爲了完整,不過,import
語法確實爲我們提供了三件事:m
不會:
合格的進口。能夠執行
import qualified Data.Map as M
並使用M.lookup
要比執行Data.Map.lookup
或遭受模糊性錯誤要好得多。 (請注意,所安裝的每個軟件包都可在GHCi中獲得完全限定,因此單獨購買import qualified Module
並不會產生任何影響。)導入列表。即使我有從
Data.Map
M
合格的功能,我仍然可以做import Data.Map (Map)
只是使類型範圍不合格。進口
hiding
。與上面相反;也許我正在寫我自己的排序程序,所以我可以做import Data.List hiding (sort)
。
您還可以檢出§2.4.5, "What's really in scope at the prompt?", in the GHC (7.6) user's guide。
謝謝你的詳細解答;如果我還沒有標記線程「解決」,我會選擇它。 – planarian
- 1. Haskell導入MissingH
- 2. Haskell工具重寫導入語句以命名所有導入?
- 3. Haskell case語法
- 4. 數據庫導入錯誤語法
- 5. 什麼是Haskell語法來導入子目錄中的模塊?
- 6. Haskell:輸入語法錯誤(意外的'=')
- 7. 導入Haskell模塊
- 8. Haskell導入模塊
- 9. haskell導入問題
- 10. Haskell的語法「Functor [::]」
- 11. Haskell語法錯誤!
- 12. 讓語法在Haskell
- 13. Haskell語法錯誤
- 14. Haskell - 語法錯誤
- 15. Haskell語法例如
- 16. 學習Haskell語法
- 17. Haskell記錄語法
- 18. 語法着色Haskell?
- 19. Haskell模塊導入本身
- 20. 怪(?)模塊導入語法
- 21. JavaScript ES6 JSON導入語法
- 22. Haskell調試 - 語法問題
- 23. 這是什麼Haskell語法?
- 24. 刪除語法糖:在Haskell
- 25. Haskell中if語句的正確語法
- 26. Haskell語法錯誤where語句
- 27. 角度無法導入庫
- 28. 無法導入python庫'zipfile'
- 29. 無法導入庫libcore.io.IoBridge
- 30. Spring:無法導入庫
那麼:簡單來說簡潔? – planarian
它發生在我身上:m一旦它們被導入,它也允許*刪除*庫。 – planarian
是的,如果你使用'-'而不是'+' – jev