如何从命令行/其他语言使用Agda?

时间:2018-10-10 04:04:53

标签: agda

大多数与Agda的交互都是通过EMACS完成的,但是有没有办法以编程方式进行呢?即,是否可以通过命令行或某些API进行所有操作?主要目标是构建一个薄包装器,以便我们可以使用另一种语言来调用Agda,例如:

claims

我之前曾问过如何使用Agda as a library,但显然只涉及Haskell。我尝试查看Agda的VIM扩展以了解其工作方式,似乎它正在向Agda发送命令,但我不确定具体如何。指向相关文档的指针将不胜感激!

1 个答案:

答案 0 :(得分:4)

据我所知,当前(在master分支上)有两种从命令行与Agda进行交互的方式:

  1. Emacs agda --interaction的原始后端
  2. 新的基于JSON的后端agda --interaction-json

Emacs后端

  • Emacs会将格式为 Haskell数据类型的消息发送到Agda (简单)
  • Agda将以 Emacs Lisp 的形式答复Emacs的消耗情况(困难)

如您所见,此后端专为Emacs设计。 需要进行一些逆向工程才能弄清楚他们彼此之间在说什么。

在实现some notes时,我已经就Emacs协议做了agda-mode on Atom了。但恐怕它在撰写本文时已偏离了实际的实现。

如果您想与Emacs后端进行交互,以下是Agda源代码中的一些相关部分,您可能会发现它们有用:


JSON后端

不用说,使用Emacs协议会很痛苦。
因此,我设法在新的后端中用JSON替换了Emacs Lisp。

  • 您仍然需要像在Emacs中一样将格式为 Haskell数据类型的消息发送到Agda
  • Agda将使用 JSON
  • 进行回复

现在,您将不必处理Emacs Lisp的S表达式。 responses are encoded as JSON

就是这样

但是,有效负载仍然被序列化为字符串,因此很难从Agda中提取有用的信息。因此,我仍在研究the json branch,尝试在JSON中encode the payload