问题标签 [ocaml-dune]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
32 浏览

ocaml - 有没有办法使用 dune 或 opam 来检查安装的 ocaml 编译器版本是否符合规范

我有一个沙丘项目文件,指定我的 ocaml 编译器应至少为 4.05.0

我创建了一个配置文件来检查我需要的所有内容是否已正确安装(使用Unix.open_process_in "which <executabe>"和的混合dune external-lib-deps --missing @@default),但对于 OCaml 版本,我必须编写:

但我不太喜欢它,因为如果我需要更改版本要求,它不会传播到此检查,我必须手动更改它。

有没有办法像我检查所有需要的 OCaml 软件包都安装了一样dune external-lib-deps --missing @@default?(不一定只针对 OCaml 编译器,还针对每个绑定到某个版本的包?)

由于依赖项规范是一个逻辑表达式,我希望 opam 背后的求解器可以为我做这件事,因为我无法在我的配置文件中实现 SMT 求解器。

0 投票
1 回答
42 浏览

makefile - 通过 makefile 或手动添加模块

我有一个用传统 makefile 构建的大项目。我想在我的项目中添加一个像这个项目这样的错误处理机制。

在示例项目中,UnitActionsParser按照dune的如下规则生成了一个模块:

目前,makefile我的项目包含如下内容:

所以现在,我想知道如何构建这样的UnitActionsParser模块。最好的办法是修改我的makefile,有人知道怎么做吗?否则,我们也可以首先手动添加它。我在命令行中尝试过$ menhir --table --external-tokens Parser,但它返回了我Usage: menhir <options> <filenames>。有人可以帮忙吗?

0 投票
0 回答
45 浏览

emacs - Emacs (GUI) 上的 Merlin 无法获取 dune 提供的 merlin 配置

首先,请知道我是 Ocaml 的 Dune 和项目管理的初学者。尽管如此,我已经安装了沙丘并创建了一个新的沙丘项目,它处理 camlimages 库、图形等。当我照常进行时,项目编译和执行效果很好:

  • opam exec 沙丘构建
  • opam exec 沙丘 exec ./myexecutable.exe

但是,我不能在 emacs 中使用 Tuareg 模式,因为后者似乎无法很好地找到/理解 dune-project 配置文件代表沙丘 v2.8 之前的前者“.merlin”(根据文档:https: //dune.readthedocs.io/en/latest/usage.html?highlight=merlin )。当我尝试将当前的 .ml 启动到 Tuareg repl 时,这意味着很多“未绑定模块”错误。

我试图手动添加包

  • Merlin > 选择套餐

但是 Merlin 似乎并不关心这个,即使它出现在 merlin 配置文件中。


一些假设

每次我想从 dune 访问外部“安装 opam”的库/包时,我需要从 Opam 启动 Dune 以便访问它们,而不是在 shell 中启动一个简单的“Dune”命令。我觉得“shell环境”无法访问“Opam环境”。这对我的问题有影响吗?


您可以在下面找到一些相关信息,这可能有助于理解我的问题:

  • Merlin > 检查配置而不手动添加包

加载的 .merlin 文件:/home/erwan/Bureau/Nextcloud/GIT/Projet_integrateur_L3OPTIM/dev/importimg/dune-project 自定义缓冲区设置:-packages: none -flags: "" -extensions: none 自定义 merlin 设置:((env " PATH=/home/erwan/.opam/default/bin”)(命令。“/home/erwan/.opam/default/bin/ocamlmerlin”))

  • 沙丘文件

(可执行文件(名称 importimg)(库 camlimages.core camlimages.png 图形 camlimages.graphics))

  • 我的项目的树结构(由沙丘生成)
  • .emacs 内容
  • 版本

梅林:3.7.0

沙丘:2.1.3

Emacs:2020-03-26 的 GNU Emacs 26.3(build 2, x86_64-pc-linux-gnu, GTK+ Version 3.24.14),由 Debian 修改

欧帕姆:2.0.5

奥卡姆:4.08.1


提前致谢

0 投票
1 回答
37 浏览

ocaml - 生成启用增量 API 和检查 API 的解析器

我有一个由 menhir 和传统 makefile 构建的大项目。首先,我想在我的项目中添加一个像这个项目这样的错误处理机制。

通过跟踪示例项目的沙丘,我设法通过以下命令生成.mly.mli.ml和of :.cmi.cmounitActionsParser_e.mly

增量 API 和错误处理确实有效。

然后,我想将像这个项目这样的错误恢复添加到我的项目中。然后,在我的项目中items state引发了错误。Error: Unbound value items根据手册沙丘,我想我需要在--inspection某处添加。

我试过了menhir --explain --inspection --table --dump --infer --external-tokens Parser_e unitActionsParser_e.mly,然后camlfind ocamlc -package menhirLib -c unitActionsParser_e.mli报错Unbound type constructor Parser_e.terminal

我也尝试直接处理parser_e.mly而不是使用unitActionsParser_eby menhir --explain --inspection --table --dump --infer parser_e.mly,但它返回了一个错误Unbound module Utilitywhere Utilityis a module in another folder required by parser_e.mly。在我手动复制utility.cm*到 的文件夹后parser_e.mly,它返回了一个错误Unbound module Sedlexing(这里是一个我们可以重现错误的 fork)(这可能与手册的与构建系统的交互有关)。

有谁知道生成解析器(UnitActionsParser_eParser_e)的正确命令和标志是什么,以启用 Menhir 的增量 API 和检查 API?

(* 在讨论.ocaml.org 中的链接:https ://discuss.ocaml.org/t/generate-a-parser-enabling-incremental-api-and-inspection-api/9380 *)

0 投票
0 回答
33 浏览

menhir - 让menhir通过dune使用外部模块

这个项目中,我想添加一个文件夹extra,其中包含try.ml

然后,在 中parser.mly,我想使用模块Try。所以我需要在标题中打开它:

此刻,dune如下

有谁知道如何修改沙丘文件以使其考虑Try在内?

0 投票
1 回答
31 浏览

ocaml - 沙丘无法编译我的第一个项目

我按照以下步骤创建我的项目

  1. 使用以下 dune 命令创建项目

    dune init proj --kind=lib mymaps

  2. 然后在“lib”目录下添加2个文件

我的地图.mli

我的地图.ml

  1. 在“tests”目录下添加以下文件

mymaps_tests.ml

但是,当我去命令行并说它dune build

这是我工作的 GitHub 链接https://github.com/abhsrivastava/mymaps

我正在关注 YouTube 上的教程,但我没有看到他们为测试项目实现任何模块,他们直接编写了测试。不知道为什么要寻找另一个正在测试的 Mymaps。

0 投票
1 回答
17 浏览

ocaml - OUnit2 未绑定模块

我正在编写我的第一个 Ocaml+OUnit2+Dune 项目。但是在我的单元测试中,当我说打开 Mymaps 时,它会显示“未绑定模块 Mymaps”

我的项目结构如下

mymaps_test.ml 的内容

mymaps.mli 的内容

mymaps.ml 的内容

测试/沙丘文件的内容

lib/dune 文件的内容

这是 Github 的链接https://github.com/abhsrivastava/mymaps.git

请让我知道为什么我的测试无法打开模块。为什么它说未绑定模块 Mymaps。(我也尝试过小写的 mymaps 和 MyMaps,但它就是看不到它)。