gpt4 book ai didi

ocaml - 如何按名称和类型搜索 OCaml 函数

转载 作者:行者123 更新时间:2023-12-04 05:28:59 25 4
gpt4 key购买 nike

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

  • Hoogle 这样的网站和 Stackage .这些网站提供两种主要类型的搜索:
  • 搜索函数的名称。例如,here is a search on Hoogle对于名为 catMaybes 的函数.

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

    这种搜索的主要用例是当您看到某个函数在某处使用并且您想知道它的类型以及它定义在哪个包中时。
  • 搜索函数的类型。例如,here is a search on Hoogle对于 [Maybe a] -> [a] 类型的函数.

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

    此类搜索的主要用例发生在您编写代码时。你知道你需要的函数的类型,你想知道它是否已经在某个地方定义了。例如,您有一个列表 Maybe s,并且您想返回一个包含所有 Nothing 的列表s 删除。你知道函数的类型是 [Maybe a] -> [a] .
  • 直接来自 ghci .在 ghci , 使用 :info 很容易获得有关函数的信息命令,只要该功能已经在您的环境中。

    例如,这里是 ghci session 显示如何获取有关 catMaybes 的信息功能。注意您必须如何导入 Data.Maybes模块第一:
    > import Data.Maybe
    > :info catMaybes
    catMaybes :: [Maybe a] -> [a] -- Defined in ‘Data.Maybe’
    >
    :info显示 catMaybes 的类型以及定义的地方。


  • 在 OCaml 中, 什么网站/工具可用于搜索 的函数姓名或类型 ?

    例如,我正在阅读 Real World OCaml .我遇到了 some code使用 |>功能。想知道有没有函数 <|用于组成相反的方式。但是,我不知道有什么方法可以搜索名为 <| 的函数。 .另外,我不知道有什么方法可以找出 |> 的位置。被定义为。

    基于 linked code above , 我猜是 |>要么必须在 Pervasives 中,要么必须在 Jane Street's Core 的某个地方,但如果有一个工具可以提供准确的位置,那就太好了。

    最佳答案

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

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

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

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

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

    我们 forked它,更新到最新的 OCaml,修复了一些错误,并增强了统一程序以获得更好的类型搜索。结果可以找到 here .

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

    关于ocaml - 如何按名称和类型搜索 OCaml 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42003463/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com