Import - HaskellWiki で Haskell の import の説明がされているのですが、ここで簡単にまとめてみます。
Mod
モジュールでは x
、y
、z
がエクスポートされているものとします。
Import 方法 | スコープに含まれるもの |
---|---|
import Mod |
x , y , z , Mod.x , Mod.y , Mod.z
|
import Mod () |
なし1 |
import Mod (x, y) |
x , y , Mod.x , Mod.y
|
import qualified Mod |
Mod.x , Mod.y , Mod.z
|
import qualified Mod (x, y) |
Mod.x , Mod.y
|
import Mod hiding (x, y) |
z , Mod.z
|
import qualified Mod hiding (x, y) |
Mod.z |
import Mod as Foo |
x , y , z , Foo.x , Foo.y , Foo.z
|
import Mod as Foo (x, y) |
x , y , Foo.x , Foo.y
|
import qualified Mod as Foo |
Foo.x , Foo.y , Foo.z
|
import qualified Mod as Foo (x, y) |
Foo.x , Foo.y
|
私は自分で作成したモジュールは import Mod
を使用していましたが、これは使わないほうが良いと思いました。例えば以下のようなコードがあったとして:
import Foo
import Bar
main = baz >>= qux
baz
と qux
がなんのモジュールで定義されているのか第三者が見てわからないためです。
この中で使用するのは、以下が良さそうです。
-
import Mod (x, y)
: 関数が他とかぶらない場合 -
import qualified Mod
: 関数が他とかぶり、モジュールのパッケージ名が短い場合 -
import qualified Mod as Foo
: 関数が他とかぶり、モジュールのパッケージ名が長い場合
import Prelude hiding (zip)
として、他のモジュールの zip
関数を使用する方法もありますが、基本的には import qualified Mod as Foo
として Foo.zip
を使用する方が良いと思います。
-
タイプクラスのインスタンスだけをインポートするのに便利です(そういうユースケースがあれば、ですが) ↩