6

我的项目中有一个虚拟模块,其唯一目的是为库的其余部分保存 Haddock 文档。实际上我不需要这个模块中导入任何东西,但是如果我不导入其他模块,Haddock 不会将函数名称超链接到它们的模块。

我的模块看起来像这样

{- |

Lots of Haddock text here... it references 'someFunction'.

-}
module TopLevelDoc () where

import Other.Module.With.SomeFunction

现在,如果我构建项目,我会收到以下警告:

    Warning: The import of `Other.Module.With.SomeFunction' is redundant
           except perhaps to import instances from `Other.Module.With.SomeFunction'
         To import instances alone, use: import Other.Module.With.SomeFunction()

如果我删除导入或制作它们(),Haddock 不会超链接someFunction到其文档。如果我保留这样的导入,我会收到很多我不喜欢的错误警告。而且我不想在整个项目中抑制这种警告,它可能对除此之外的任何其他模块有用。

问题:

  1. 构建时如何在没有此类警告的情况下获得超链接的 Haddock 输出?
  2. 是否可以基于每个文件禁用警告?(就像我可以在全球范围内使用ghc-optionsin一样.cabal
4

1 回答 1

7

要使未使用的导入警告静音,您可以在文件顶部放置一个编译指示:

{-# OPTIONS_GHC -fno-warn-unused-imports #-}

您可以通过明确限定它们来链接到不在范围内的标识符:

通过给出实体的完整限定名,也可以引用不在当前模块范围内的实体:

-- | The identifier 'M.T' is not in scope

如果 MT 不在范围内,那么 Haddock 将简单地发出一个链接,指向从模块 M 导出的实体 T(不检查是否存在 M 或 MT)。

黑线鳕用户指南

但是,这可能会使您的文档源变得非常丑陋,并且模块资格不会从输出中删除,因此我建议您关闭警告。

于 2012-02-02T13:33:26.653 回答