非常に基本的な質問を申し訳ありません:GHCiでは、import Library.Name
と:m +Library.Name
の間に違いがありますか?それらは同等に見えますが、私は代替構文の理由があると仮定します。Haskellライブラリのインポート構文
答えて
ソースコードにimport
を含めるとより一般的ですが、:m
はghci固有のコマンドです(便宜上)。
ghci> :m + Module1 ... ModuleN
を使用すると、複数のモジュールを読み込むことができます。モジュールをアンロードする場合は、+
の代わりに-
を使用してください。 ghci
はインタラクティブなので、あなたのワークフローではない限り、:m
に固執します:.hs
ファイルを編集して保存し、リロードしてください。次に、import
がより適しています(さらに多くの機能、たとえばqualified imports)。
import
ディレクティブは、後でたとえばghc
を使用してプログラムをコンパイルする場合にも機能します。特定の関数のみを選択的にインポートすることができます。import Data.List (sort)
はソートのみをインポートするため、ネームスペースを少なくします。
あなたは正しく、import Module
と:module + Module
は同じですが、いくつかの理由があります(これは:m
と略記されます)。
これは古いです。 GHCiは実際にはちょうど
IO
do
ブロックの内側に使用されています。今は言語のすべての部分をサポートしていますので、import
を実行できます。 (それは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
がないという3つのことを提供しません。import qualified Data.Map as M
を実行してM.lookup
を使用すると、Data.Map.lookup
を実行する必要があるか、あいまいなエラーが発生する可能性が非常に高いです。 (インストールされているすべてのパッケージはGHCiで完全修飾されているので、import qualified Module
だけで購入することはできません。)リストをインポートします。私が
M
で修飾されたData.Map
の機能を持っていても、私はまだ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
だから:簡潔さのためだけにm? – planarian
それは私には次のようなことが起こります。mはまた、一旦インポートされるとライブラリの*削除*を許可します。 – planarian
はい、 '+'の代わりに '-'を使用した場合 – jev