40

私は Haskell モジュールを持っており、そのファイルで宣言されているすべてのオブジェクトを、1 つの特定の関数を除いてエクスポートしたいと考えていますlocal_func

他のすべての宣言を明示的にリストするエクスポート リストを作成する (そして、このリストを永遠に最新の状態に注意深く保つ) よりも、これを達成するためのよりクリーンな方法はありますか?

言い換えれば、私は の類似物が欲しいのimport MyModule hiding (local_func)ですが、インポート時ではなくエクスポートモジュールで指定されています。

4

2 に答える 2

35

私の知る限り、現在これを行う方法はありません。

私が通常行うことは、重要なものを再エクスポートする中央モジュールを用意することです。これは、必要なものをすべてインポートする便利な方法であり、これらのものを定義するモジュールで何も隠しません (場合によっては、おそらく予測できないこともあります)。 ! - ユーザーがモジュール内のものを簡単に変更できるようにします)。

これを行うには、次の構文を使用します。

-- |Convenient import module
module Foo.Import (module All) where

-- Import what you want to export
import Foo.Stuff as All hiding (local_func)
-- You can import several modules into the same namespace for this trick!
-- For example if using your module also requires 'decode' from "Data.Aeson" you can do
import Data.Aeson as All (decode)

これで、これらのものを便利にエクスポートできました。

于 2013-06-21T18:25:36.937 に答える
8

残念ながら違います。

あなたが求めているようなことを可能にする小さな構文追加を想像することができます。現在、次のように書くことができます。

module M (module M) where

foo = quux

quux = 1+2

モジュール全体を明示的にエクスポートできます。しかし、そのモジュールから隠すことができるような構文を追加するとします。次に、次のように書くことができます。

module M (module M hiding (quux)) where

foo = quux

quux = 1+2
于 2013-06-21T18:27:42.273 に答える