2016-05-10 7 views
1

私はライブラリを書いており、その中にいくつかの(非常に複雑な)タイプの同義語Tを定義してエクスポートしました。Haddockの型シノニムの宣言を隠す

-- | A type 
type T a b i o = ReaderT (WriterT i a X) (WriterT i b o) 

ライブラリーの内部には意味があります。しかし、ユーザーには、それは不必要で混乱します。そのため、実際の宣言をHaddockページで非表示にすることをお勧めします。

すなわち、私はむしろ、これよりも... ...

type T a b i o 
    A type 

をこのようなハドックページの外観を好むだろう。

type T a b i o = ReaderT (WriterT i a X) (WriterT i b o) 
    A type 

これは可能ですか?もしそうなら、どうですか?

答えて

2

ユーザーが実際に何を理解する必要がない場合は、newtypeを使用し、コンストラクタをエクスポートしないでください。 GeneralizedNewtypeDerivingは、このアプローチの苦労を緩和するのに役立ちます。あなたのユーザの中には、カーテンの後ろを覗きたい人がいるかもしれませんが、newtypeコンストラクタをベースモジュールから公開することはできますが、メインモジュールから隠すことができます。タイプ同義語は一般的に抽象化のための非常に弱いツールです。 lensライブラリは、パッケージがlensに依存せずにパッケージを定義できるようにするために、それらを使用していますが、それはちょっと変わったことです。

タイプシノニムの意味を隠すようにHaddockに指示する方法はありません。しかし、あなたが望むことができないというわけではありません。

Cabalは、ドキュメント作成時に__HADDOCK_VERSION__ CPPマクロを定義しています。あなたがそう思っているなら、これを検出して、タイプ同義語をnewtypeに置き換えることができます。もちろんこれはコンパイルされませんが、私はHaddockに何らかのトラブルを引き起こすとは思わないでしょう。私はこれがまったく賢明だとは思わない。

+0

私はこれを考慮していましたが、長期的には私がライブラリで取ることにしたルートかもしれません。しかし、私が依頼したことが可能であれば、私はまだ興味があります。答えにその質問に対する回答を含めると、私はそれを受け入れます。 – Kwarrtz

+0

@Kwarrtz、ドキュメントビルドの検出方法に関する情報を追加しました。 – dfeuer