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