在黑线鳕中隐藏类型同义词的声明
Hiding declaration of type synonym in 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 = ReaderT (WriterT i a X) (WriterT i b o)
A type
这可能吗?如果可以,怎么做?
如果您的用户真的不需要知道底层是什么,您应该使用 newtype
而不是导出构造函数。 GeneralizedNewtypeDeriving
可以帮助减轻这种方法的痛苦。如果您的某些用户可能想窥探幕后情况,您可以从基本模块中公开 newtype
构造函数,但将其隐藏在主模块中。一般来说,类型同义词是一个非常弱的抽象工具。 lens
库使用它们取得了很好的效果,允许包定义镜头而不依赖于 lens
,但这有点奇怪。
我认为没有任何方法可以告诉 Haddock 隐藏类型同义词的含义。但是,这并不意味着您不能为所欲为。
Cabal 在构建文档时定义了 __HADDOCK_VERSION__
CPP 宏。如果您愿意,可以检测到这一点并将类型同义词替换为 newtype
。当然,这不会编译,但我认为它不会给 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 = ReaderT (WriterT i a X) (WriterT i b o)
A type
这可能吗?如果可以,怎么做?
如果您的用户真的不需要知道底层是什么,您应该使用 newtype
而不是导出构造函数。 GeneralizedNewtypeDeriving
可以帮助减轻这种方法的痛苦。如果您的某些用户可能想窥探幕后情况,您可以从基本模块中公开 newtype
构造函数,但将其隐藏在主模块中。一般来说,类型同义词是一个非常弱的抽象工具。 lens
库使用它们取得了很好的效果,允许包定义镜头而不依赖于 lens
,但这有点奇怪。
我认为没有任何方法可以告诉 Haddock 隐藏类型同义词的含义。但是,这并不意味着您不能为所欲为。
Cabal 在构建文档时定义了 __HADDOCK_VERSION__
CPP 宏。如果您愿意,可以检测到这一点并将类型同义词替换为 newtype
。当然,这不会编译,但我认为它不会给 Haddock 带来任何麻烦。不过,我认为这根本不明智。