Haskell Haddock中类型同义词的隐藏声明

Haskell Haddock中类型同义词的隐藏声明,haskell,haddock,Haskell,Haddock,我正在编写一个库,在其中我定义并导出了一些(非常复杂的)类型同义词T -- | 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 = Read

我正在编写一个库,在其中我定义并导出了一些(非常复杂的)类型同义词
T

-- | 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

这可能吗?如果是,怎么做?

如果你的用户真的不需要知道引擎盖下面是什么,你应该使用
newtype
,而不是导出构造函数
generalizednewtypedering
可以帮助缓解这种方法带来的痛苦。如果您的一些用户可能想在幕后窥视,您可以从基本模块中公开
newtype
构造函数,但从主模块中隐藏它。一般来说,类型同义词是一种非常弱的抽象工具。
lens
库很好地使用了它们,允许包在不依赖
lens
的情况下定义镜头,但这有点奇怪

我不认为有任何方法可以告诉Haddock隐藏类型同义词的含义。然而,这并不意味着你不能做你想做的事


在构建文档时,Cabal定义了
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu版本
CPP宏。如果您愿意,可以检测到这一点,并将类型同义词替换为
newtype
。当然,这不会编译,但我不认为它会给Haddock带来任何麻烦。不过,我认为这一点都不明智。

我已经考虑过这一点,从长远来看,这可能是我选择图书馆的路线。然而,我仍然感兴趣,主要是出于好奇,如果我问的是可能的。如果你在回答中包含了这个问题的答案,我会接受。@Kwarrtz,我已经添加了关于如何检测文档构建的信息。