8

在 Haskell 中,有两种主要的方法来查找函数信息。

  1. HoogleStackage这样的网站。这些网站提供两种主要类型的搜索:

    1. 搜索函数的名称。例如,这里是在 Hoogle 上搜索一个名为catMaybes.

      此搜索返回catMaybes函数的类型,以及定义它的包和模块。

      这种搜索的主要用例是当您看到某个函数在某处使用并且您想知道它的类型以及它在哪个包中定义时。

    2. 搜索函数的类型。例如,这里是在 Hoogle 上搜索类型为 的函数[Maybe a] -> [a]

      此搜索返回多个具有相似类型的函数,其中第一个是catMaybes. 它还返回catMaybes定义的包和模块。

      此类搜索的主要用例发生在您编写代码时。你知道你需要的函数的类型,你想知道它是否已经在某个地方定义了。例如,您有一个Maybes 列表,并且您希望返回一个Nothing删除了所有 s 的列表。您知道该函数将具有 type [Maybe a] -> [a]

  2. 直接从ghci. 在中,只要该函数已经在您的环境中,就可以通过命令ghci轻松获取有关函数的信息。:info

    例如,这里是一个ghci展示如何获取函数信息的会话catMaybes。请注意如何必须首先导入Data.Maybes模块:

    > import Data.Maybe
    > :info catMaybes
    catMaybes :: [Maybe a] -> [a]   -- Defined in ‘Data.Maybe’
    >
    

    :info显示了的类型catMaybes和定义的位置。


在 OCaml 中,哪些站点/工具可用于按名称或类型搜索函数?

例如,我正在阅读Real World OCaml。我遇到了一些使用该|>函数的代码。我想知道是否有一个功能<|可以以相反的方式进行组合。但是,我不知道有什么方法可以搜索一个名为<|. 另外,我不知道有什么方法可以确定在哪里|>定义。

根据上面的链接代码,我想|>要么必须在 Pervasives 中,要么在 Jane Street 的核心中的某个地方,但如果有一个工具可以给出确切的位置,那就太好了。

4

3 回答 3

9

awesome-ocaml 有一个关于开发工具的部分,应该会有所帮助。

  • ocamloscope ( github ) 有点像 OCaml 的 Hoogle。按名称搜索效果很好。按类型搜索不太好。
  • 对于按名称进行本地搜索,ocp-browser提供了方便的 TUI。
  • 在您的编辑器中,merlin 和 ocp-index 可以进行查找到定义和查找文档。
  • 这里有一个 odig 的 WIP 公共实例,其中包含很多(但不是全部)包。如另一个答案所述,您也可以在本地使用odig 。

PS 你要找的函数是@@,它在标准库中。

于 2017-02-02T14:05:25.177 回答
4

ocp-index包提供了用于搜索 API 函数的基本工具,例如,

$ ocp-index locate '|>'
/home/ivg/.opam/devel/build/ocaml/stdlib/pervasives.ml:39:0

ocp-browser是这个实用程序的一个漂亮的界面。

它们都与 Emacs(和其他流行的文本编辑器)集成。说到文本编辑器和 IDE,Merlin是一个杀手级功能,没有它我无法再想象 OCaml 编码了。它能够直接跳转到定义、提取文档和增量类型检查。

说到基于 Web 的搜索,有一个argot文档生成器,它有一个 API 搜索引擎,具有类型搜索、全文搜索和正则表达式。一个项目有些被遗弃,不能与最新的 OCaml 一起使用。

我们对它进行了分叉,更新到最新的 OCaml,修复了一些错误,并增强了统一过程以获得更好的类型搜索。结果可以在这里找到。

主要功能之一是按类型清单搜索,它忽略了函数中的参数排序、字段名称、记录名称和元组之间的差异(例如,string * int与 相同{name : string; age : int})和别名等不相关的事情。例如,在我们的项目中,有很多别名,例如type bil = stmt list = Stmt.t list = Stmt.t Core_kernel.Std.list = .... 您可以在搜索时选择任何名称(使用清单类型),因为该算法将正确统一所有别名。

于 2017-02-02T19:11:30.037 回答
3

odig 可能会有所帮助。安装后,您可以按包和功能浏览。

于 2017-02-02T13:46:19.557 回答