Haskell离线文档?

96

有没有可能为Haskell核心库(或者更多)获得离线文档呢?

有时我会带着我的笔记本电脑去没有WiFi的咖啡店,如果有像Hoogle这样的离线工具就太好了。

9个回答

53

Hoogle可以离线使用,可从Cabal安装:http://hackage.haskell.org/package/hoogle

使用说明在http://www.haskell.org/haskellwiki/Hoogle#Command_Line_Search_Flags上。

用法:

$ hoogle --help
Hoogle v4.2.8, (C) Neil Mitchell 2004-2011
http://haskell.org/hoogle

hoogle [COMMAND] ... [OPTIONS]

Commands:
  [search]  Perform a search
  data      Generate Hoogle databases
  server    Start a Hoogle server
  combine   Combine multiple databases into one
  convert   Convert an input file to a database
  test      Run tests
  dump      Dump sections of a database to stdout
  rank      Generate ranking information
  log       Analyse log files

Common flags:
  -? --help     Display help message
  -V --version  Print version information
  -v --verbose  Loud verbosity
  -q --quiet    Quiet verbosity

使用hoogle data创建默认数据库(更多信息请参见http://neilmitchell.blogspot.com/2008/08/hoogle-database-generation.html)。

编辑:在本地安装Hoogle后的使用会话:

$ hoogle
No query entered
Try --help for command line options
$ hoogle data
(downloads databases...takes a few minutes)

我在这里遇到了一个错误...显然与Cabal的版本有关,所以我更新了它(http://hackage.haskell.org/trac/hackage/ticket/811)。但这并没有帮助,所以我运行了hoogle data all,但由于花费的时间太长(它似乎要搜索Hackage上的每个包),我取消了它。它仍然不允许像hoogle map这样的查询,但允许hoogle map +base(即将搜索限制为base包)。希望它对你有用!
编辑2:这似乎解决了我的问题。
$cd .cabal/share/hoogle-4.2.8/databases
$hoogle combine base.hoo
$hoogle foldl\'
Data.List foldl' :: (a -> b -> a) -> a -> [b] -> a
Data.Foldable foldl' :: Foldable t => (a -> b -> a) -> a -> t b -> a

17
你也可能希望为已安装的包启用文档功能,方法是在你的 ~/.cabal/config 文件中添加 documentation: True ,然后使用 cabal install world --reinstall 命令重新安装这些包。 - hammar
3
运行命令hoogle data --local花费了我3分钟(其中大部分时间用于下载)。然后我可以运行hoogle foldl来查找foldl函数,或者运行hoogle server --local并访问http://localhost/,这是一个完整的服务器,并包含HTML文档的链接。 - Neil Mitchell
1
@NeilMitchell hoogle data allhoogle data --local 下载了很多东西,但仍然无法让我在包中找到函数(例如 parseFileWithMode)。这个功能应该可以用吗? - nh2
1
@nh2:默认情况下,Hoogle只搜索平台。尝试使用“hoogle +haskell-src-exts parseFile”。 - Neil Mitchell
2
"hoogle server --local"需要更多的关注度。它类似于"godoc -http"。 - sjakobi
显示剩余3条评论

23

回答已经过时了 :( 第一个链接好像失效了。 - MaiaVictor
就是这样。谢谢! - MaiaVictor
这对我来说是最好的答案,因为我无法通过hoogle server --local实现目的。 - user24601

14
如果您安装了Haskell平台,它将包括GHC文档和GHC库文档(覆盖核心库)。在Windows上,它们位于“所有程序| Haskell平台”下的“开始菜单”中。

太好了,这个在Linux上有类似的东西吗? - Andriy Drozdyuk
我认为 Haskell 平台在不同的操作系统上应该大致相同,但我从未在 Linux 上使用过。如果你已经安装了它,可以尝试搜索文件“Data-Binary.html”(Data.Binary 的文档),看看文档是否已经被安装在某个地方。 - arx
4
在Debian/Ubuntu系统上,我相信你可以安装像haskell-platform-doc这样的文档包。 - li.davidm
Haskell平台将不再得到维护,而且它一直过时,所以我认为这不是一个好的答案。 - dredozubov
1
@dredozubov 你有参考来源吗?我查不到未来停止维护的相关信息。 - Andriy Drozdyuk
1
@drozzy 看看这个:https://mail.haskell.org/pipermail/ghc-devs/2015-October/010068.html 尽管如此,它似乎仍在维护中。 - dredozubov

11

编辑您的~/.cabal/config文件。查找一行(可能被注释掉)写着documentation: False。将该行更改为documentation: True并取消注释。现在使用cabal install安装项目时也会构建和保存文档。

在同一配置文件中继续寻找,您会找到像doc-index-file、docdir、datadir、prefix等选项,可以让您配置文档存储的位置。


6
我相信最有用的选项是像dash(OS X)/zeal加上生成的docsets这样的docset软件。这样你就可以免费获得搜索,并且还可以选择构建自定义docsets。使用任何一个项目中的“基础”包haddock文档都不成问题。您可以使用haddocsetdash-haskell构建自定义docsets。它还可以与emacs/vim/其他编辑器很好地集成,允许您拥有基于项目的文档集(通过这种方式,您将在每个项目的基础上获得相关版本,忘记所有这些本地hoogle的麻烦!),并且不限制您的任何构建流程。
如果使用cabal-install构建项目,则可以在~/.cabal/config中设置documentation: True,然后重新安装依赖项以在本地生成haddocks。
如果您正在使用stack,您可以利用stack haddock命令来构建您的依赖项和生成的Haddocks项目。

3

我使用 devdocs.io,它有很多语言和库的文档(包括Haskell),并且可以离线使用。


1

Velocity 是一个免费且美观的通用工具,支持多种语言、技术和库,并可一键更新。

您很可能能在其文档列表中找到更多您正在使用的内容。


1
对于Windows系统,请安装Cygwin的wget和curl软件包。这将启用"hoogle data"命令。

0

如果您正在使用基于Debian的发行版及其软件包,则会在以下位置找到所有已安装的Haskell软件包的组合文档(如果您还安装了libghc-foo-doc软件包):

file:///usr/share/doc/ghc-doc/html/libraries/index.html

此外,libghc-foo-doc 包含了 hoogle 所需的必要文件,因此如果你使用 apt-get install hoogle 命令安装了它,那么你就可以立即使用 hoogle 来搜索通过这种方式安装的所有库。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接