Haskell haddock自动文档

时间:2017-02-28 13:16:03

标签: haskell documentation-generation haddock

我无法使用haddock为haskell生成文档。

到目前为止,我还没有找到任何有用的例子。该文档有很多选项,我也不确定注释语法,以便正确生成文档。

我知道在ghci中我可以调用:bro用于加载文件,它列出了类型和函数,我希望这些函数可以用haddock记录,即使没有注释。我不知道这是否可能。

1 个答案:

答案 0 :(得分:3)

如果您构建可执行文件,例如

module Main (main) -- this line is implicit if your module isn't named otherwise
   where

-- | Some important function that does most of the work
foo :: Bar -> Baz
foo = ...

-- Other definitions
-- ...

-- | The program you want to run.
main :: IO ()
main = ...

-- ...

然后Haddock认为实际上没有任何公开的文件 - 毕竟,main是使用该项目的人唯一可以接听的,其他一切都被隐藏了!

要生成foo的文档,您需要直接从Main模块或其最初定义的其他模块导出它。通常的方法是将一切真正有趣的东西放在一些“内部”模块中,比如

module Foo (foo, {- other stuff ... -}) where

-- | Some important function that does most of the work
foo :: Bar -> Baz
foo = ...

-- Other definitions
-- ... but not `main`

并且对于可执行文件仅使用“最终用户防刮塑料包装”模块

module Main (main) where

import Foo

main :: IO ()
main = ...

然后Foo的文档将包含实际有趣的Haskell API Haddocks。这将是

  

     

foo :: Bar - > Baz
执行大部分工作的一些重要功能

实际上,您希望编写类似

的文档
-- | Transmogrify a bare bar into a zapcutted one
foo :: Bar -- ^ The bare input to transmogrify
    -> Baz -- ^ The zapcutted wrimch

产生类似

的文档
  

     

foo ::

     
      
  • Bar transmogrify的裸输入

  •   
  • - > Baz zapcutted wrimch

  •   
     

将裸杆变形为zapcutted

Main的Haddock并不是很有趣,您最好将这些信息放在命令行帮助框中。

project.cabal文件中,您需要将Foo归类为属于项目的“库”部分,而Main是可执行部分。

基本上,Haddock仅适用于库,而不适用于可执行文件。