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 を使用する方が良いと思います。
-
タイプクラスのインスタンスだけをインポートするのに便利です(そういうユースケースがあれば、ですが) ↩