外国金融机构

Agda有一个非常简单的外部函数接口,用于从Agda调用Haskell函数。外部函数仅在编译的程序中执行(由阿隆佐马隆佐编译器),以及在类型检查或解释期间不要减少。

外国金融机构由三个杂注控制:

IMPORT杂注

  {-#IMPORT Hs导入#-}

IMPORT杂注指示Alonzo在编译的代码中生成Haskell导入语句。上面的杂注将生成Haskell代码

导入HsImport

导入不仅限于模块名,还可以使用Haskell导入的完整语言。例如,

  {-#导入合格数据。映射为映射#-}

IMPORT杂注可以出现在文件中的任何位置。

COMPILED_DATA杂注

  {-#编译数据D HsC1。。HsCn#-}

COMPILED_DATA杂注告诉Alonzo,Agda数据类型的构造函数应编译为Haskell构造函数HsC1。。HsCn公司。这些应该是现有类型匹配的构造函数类型的Haskell数据类型。未经检查编译器。

例子:

数据列表(A:Set):设置位置[]:列表A_::_:A->列表A->列表A{-#COMPILED_DATA列表[](:)#-}

编译后的杂注

  {-#已编译f HsCode#-}

COMPILED杂注告诉Alonzo编译假定函数(f)哈斯克尔准则Hs代码.Hs代码可以是正确类型的任意Haskell项。没有对Haskell代码执行任何检查。

例子:

假设字符串:集合{-#内置字符串#-}{-#COMPILED_TYPE字符串#-}数据单位:设置其中单位:单位{-#COMPILED_DATA单元()()#-}假设IO:设置->设置putStrLn:字符串->IO单元{-#COMPILED_TYPE IO IO#-}{-#编译的putStrLn putStrLn#-}

多态函数

Agda是一种单态语言,因此多态函数被建模为以类型作为参数的函数。这些参数也将出现在编译后的代码中,因此在调用polymorphil时必须显式丢弃Haskell函数。例如,

假设映射:{AB:Set}->(A->B)->列表A->B{-#编译地图(地图)#-}

在这种情况下,对map的编译调用仍将具有A类B类作为参数,因此编译的定义忽略了它的两个第一个参数,然后调用多态Haskell映射函数。

功能过载

Agda不支持重载,因此必须在特定实例。由于编译器的实现方式,Haskell类型检查器不会能够推断出这些实例是什么,所以在调用重载函数时,我们必须显式关于它被调用的类型。例如,

假设IO:设置->设置_>>=_:{A B:设置}->IO A->(A->IO B)->IO B{-#编译_>>=_(\__->(>>=)::IO a->(a->IO b)->IO b)#-}
页面上次修改时间:2009年9月9日下午01:43
技术支持私人维基