3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

HaskellAdvent Calendar 2020

Day 7

Haskell import いろいろ

Last updated at Posted at 2021-10-15

Import - HaskellWiki で Haskell の import の説明がされているのですが、ここで簡単にまとめてみます。

Mod モジュールでは xyz がエクスポートされているものとします。

| 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

bazqux がなんのモジュールで定義されているのか第三者が見てわからないためです。

この中で使用するのは、以下が良さそうです。

  • import Mod (x, y): 関数が他とかぶらない場合
  • import qualified Mod: 関数が他とかぶり、モジュールのパッケージ名が短い場合
  • import qualified Mod as Foo: 関数が他とかぶり、モジュールのパッケージ名が長い場合

import Prelude hiding (zip) として、他のモジュールの zip 関数を使用する方法もありますが、基本的には import qualified Mod as Foo として Foo.zip を使用する方が良いと思います。

  1. タイプクラスのインスタンスだけをインポートするのに便利です(そういうユースケースがあれば、ですが)

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?