Haskell 与haddock的差异文档

Haskell 与haddock的差异文档,haskell,cabal,cabal-install,haddock,Haskell,Cabal,Cabal Install,Haddock,如果我在我的库上执行cabal build,然后更改一个文件,那么下次运行cabal build时,我只需重新编译受更改影响的文件。我没有得到与cabalhaddock命令相同的行为:当我在更改文件后运行它时,cabal/haddock最终放弃了所有以前的工作,从头开始。这相当耗时;有没有办法对文档进行差异化更新 下面是一个生成文档的方法。文档说明: 通过使用GHCAPI对模块列表进行类型检查并处理生成的语法树,创建接口和链接环境 这就是haddock的核心功能。所以答案是否定的 cabal b

如果我在我的库上执行
cabal build
,然后更改一个文件,那么下次运行
cabal build
时,我只需重新编译受更改影响的文件。我没有得到与
cabalhaddock
命令相同的行为:当我在更改文件后运行它时,cabal/haddock最终放弃了所有以前的工作,从头开始。这相当耗时;有没有办法对文档进行差异化更新

下面是一个生成文档的方法。

文档说明:

通过使用GHCAPI对模块列表进行类型检查并处理生成的语法树,创建接口和链接环境

这就是haddock的核心功能。所以答案是否定的

cabal build
cabal haddock
毫无帮助,因为
haddock
类型检查具有不同参数的模块(例如
\uuuuuuuuuuuu
CPP变量启用)

生成可靠的增量haddock很困难,因为依赖关系图后面的代码可能会改变之前的模块文档:尤其是实例列表。也许可以转储模块接口

第一步是可以增量完成的,rest使用全局信息


尝试将冗余度设置为最大值,即
--haddock options=--verbosity=2
并检查
创建接口…
附加实例…
之间花费了多少时间…

我不记得了:如果链接到不存在的东西,haddock是否无法构建?就像使用
'MyModule'
一样,您没有可用的
MyModule
。因为如果它只是发出警告并继续运行,那么就需要这样的行为:对现有文件的任何更改或添加文件都可能会修改其他模块文档的输出。我相信重建全局索引页会花费大量时间。如果不构建这些页面,可以节省大量时间。对cabal使用-v标志可以查看正在执行哪些haddock命令。@Bakuriu如果我在文件顶部添加一个随机的
import moduledesnotexist
,haddock会短路,并且不会输出任何文档。如果我强制执行任何其他类型的编译错误(例如语法错误),haddock会向出现错误的模块输出文档,但随后会短路,并且不会输出其余模块的文档。@user5402添加了相关链接。这需要多少时间?作为一个实验,我用
cabal haddock
为parsec构建了文档,只花了几秒钟。但是,如果我运行
cabal install
,将需要更长的时间,因为必须重新生成全局索引文件。那么你的代码有多大?确切地说,您正在运行什么命令以及这些命令需要多长时间?
cabal haddock--haddock options=--verbosity=2
没有打印任何关于“创建接口”或“附加实例”的内容。@Erik,似乎您必须将
-v3
交给
cabal
才能获得
haddock
详细的输出。似乎大部分时间都花在
创建接口…
附加实例之间。也许有一个优化机会。“附加实例”和“创建接口”基本上都是即时的,但是“检查模块”步骤对每个模块都需要相当长的时间。好的。有一种中间类型,看起来可以序列化到磁盘并返回,但是如果
GHC
monad中发生了什么事情,我对GHC内部的了解还不够,这也需要保留。最好从这里转到
ghc-dev
haddock
问题跟踪器。