Haskellにおいて、複数のモジュールからあるモジュールにシンボルをimportして、それらをまとめてexportする場合、"import as"形式を使うとよさそう。
module Reexporter
( module X
, alpha
) where
import Mod1 as X (x, y)
import Mod2 as X (a, b)
alpha :: String
alpha = "hoge"
上記のように、re-exportしたいモジュール(Mod1, Mod2)を同じ名前"X"でimport asして、export listには"module X"と書く。上記の例ならMod1.x
, Mod1.y
, Mod2.a
, Mod2.b
をre-exportできる。
また、必要ならReexporter module自身にシンボル(上記の例では"alpha")を定義してexportもできる。これは通常のexport listの書き方と同様。
Reexporter module自身で定義したシンボルを全てexportしたい場合はどうするか? 個人的にはあまりそういうことをしないが、以下のようにexport listを書けばいいようだ。
module Reexporter
( module X
, module Reexporter
) where
Reexporterというモジュール名を2回書かないといけないあたりがちょっとイケてないかなあ。