史诗

如何安装最新的开发版本

最新版本的史诗后端需要一些史诗补丁,然后才能将其合并到Agda-tree中。以下内容安装需要步骤。安装新的Epic

$git克隆https://github.com/ollef/EpiVM.git$cd EpiVM$cabal安装

我们的darcs补丁位于http://web.student.chalmers.se/~danig/agda/因此,请下载最新版本(我们尚未测试合并,因此可能会发生一些冲突,请发送电子邮件,希望我们能修复它)。

使用标准库修补程序的小示例:

模块Test1,其中打开导入数据。列表隐藏(_++_)打开导入数据。单位打开导入数据。字符串打开导入数据。国家打开导入函数打开导入IO.Epic。严格材料:字符串stuff=无线$“第1行”“第2行”“第3行”“第4行”Ş[]--列表的缺点主要:IO⊤--单元主要=获取内容>>=\c->putStr c>>=\_->writeFile“temp”材料>>=\_->readFile“temp”>>=\文件->putStr(fromList(toList文件))

Epic编译器后端。

Agda编译为Epic的新后端已经创建。史诗是一种语言Idris使用,Edwin Brady制作Epigram。几乎所有的Agda都应该工作使用此后端时,需要进行更多测试。应该注意的是这是非常实验性的代码。

有一个新的杂注,用于为假定的定义提供史诗代码。给定的史诗代码可以包含定义本身,也可以使用外文调用以调用C函数。杂注是{-#COMPILED_EPIC定义代码#-}工作方式类似于COMPILED杂注,但不需要Haskell代码,它需要史诗代码。代码包含函数参数,返回类型和函数体。请注意,def是Agda定义的名称,将自动翻译为有效的史诗名称。

Epic后端支持Agda的原语杂注,用于在AgdaPrelude.e中定义(同名)(Agda/src/data/EpicInclude/)文件。

用法:>agda--epic--epic-flag=<epic-flag>--compile-dir=<dir><FILE>.agda

将在compile-dir中创建一个新目录Epic(默认:项目根目录),包含带有Epic源代码的main.e文件。这个编译器还将执行系统调用,在该文件上运行Epic编译器,按出现的顺序将任何epic-flags传递给epic。

编译需要定义main,它应该是IO Unit类型。目前,IO A动作在Epic中表示为从单元到A的功能。因此,主要功能应用于单个单元。

下面介绍如何定义IO monad:

假设IO:设置->设置返回:{A:Set}->A->IO A_>>=_:{A B:设置}->IO A->(A->IO B)->IO B{-#COMPILED_EPIC返回(u1:Unit,a:Any)->Any=ioreturn(a)#-}{-#COMPILED_EPIC_>>=_(u1:单位,u2:单位,x:Any,f:Any)->Any=iobind(x,f)#-}

ioreturn和iobind是AgdaPrelude.e中定义的史诗函数始终包括在内。这是在标准库中定义IO的方式(IO.原语)。我们只需要添加新的COMPILED_EPIC杂注。

后端支持{-#BUILTIN#-}杂注,可以使用它来获取自然数及其运算更有效地表示为《史诗》中的BigInts及其操作。

默认情况下,后端将删除强制的构造函数参数。模式匹配将重写强制变量,这样就不会使用强制变量。可以使用标记--no-forcing禁用此操作。

强制构造函数参数后看起来像Nats的所有类型删除-即如果它们有两个构造函数:一个没有参数,另一个使用递归参数-将表示为BigInts。这适用于例如,标准翅片类型。

使用Epic编译需要几个库。特别是gcc,Boehm垃圾收集器和GNU MP库。有关更多信息,请查看Epic主页:http://www.cs.st-andrews.ac.uk/~eb/epic.php

报告链接:http://web.student.chalmers.se/~danig/report.pdf

页面上次修改时间:2011年4月27日下午02:15
技术支持私人维基