Io 向控制台输出Agda程序
我已经使用Agda 9个月了。我第一次发现自己想要“运行”(作为顶级可执行文件)一个打印字符串的Agda程序。叫我老古板 我可以编写一个计算字符串的程序,让Agda在交互模式(或Emacs)下显示字符串的值。但是字符串很长,并且嵌入了换行符。我想把它打印出来 作为比较,在GHCi中,我可以这样做:Io 向控制台输出Agda程序,io,main,agda,Io,Main,Agda,我已经使用Agda 9个月了。我第一次发现自己想要“运行”(作为顶级可执行文件)一个打印字符串的Agda程序。叫我老古板 我可以编写一个计算字符串的程序,让Agda在交互模式(或Emacs)下显示字符串的值。但是字符串很长,并且嵌入了换行符。我想把它打印出来 作为比较,在GHCi中,我可以这样做: Prelude> putStrLn "hello, world!" hello, world! 但在Agda的交互模式下,我得到了以下信息: Main> putStrLn "hello,
Prelude> putStrLn "hello, world!"
hello, world!
但在Agda的交互模式下,我得到了以下信息:
Main> putStrLn "hello, world!"
.IO.♯-15
('h' .Data.Colist.Colist.∷
.Data.Colist.♯-2 'h'
('e' .Data.List.List.∷
'l' .Data.List.List.∷
'l' .Data.List.List.∷
'o' .Data.List.List.∷
',' .Data.List.List.∷
' ' .Data.List.List.∷
'w' .Data.List.List.∷
'o' .Data.List.List.∷
'r' .Data.List.List.∷
'l' .Data.List.List.∷
'd' .Data.List.List.∷ '!' .Data.List.List.∷ .Data.List.List.[]))
>>
.IO.♯-16
('h' .Data.Colist.Colist.∷
.Data.Colist.♯-2 'h'
('e' .Data.List.List.∷
'l' .Data.List.List.∷
'l' .Data.List.List.∷
'o' .Data.List.List.∷
',' .Data.List.List.∷
' ' .Data.List.List.∷
'w' .Data.List.List.∷
'o' .Data.List.List.∷
'r' .Data.List.List.∷
'l' .Data.List.List.∷
'd' .Data.List.List.∷ '!' .Data.List.List.∷ .Data.List.List.[]))
那么,我如何使用下面的程序并运行它,以便观察IO
值中累积的效果呢
module Temp where
open import Data.Unit
open import IO
main : IO ⊤
main = putStrLn "Hello, world!"
我注意到在Agda的
IO
模块中声明了一个Haskell风格的run
函数,但我还没有找到一种方法来提供帮助。Agda IO系统基本上有两层:下层(IO.Primitive
)只是HaskellIO
的代理,上层(IO
)是一个建立在顶部的包装
IO的问题在于它不能很好地与终止检查器配合使用。因此,您不必使用{-#u NON#u TERMINATING#-}
定义每个函数,而是创建一个新的(共导出的)数据类型来描述IO操作,并将所有非终止问题集中到一个函数中-运行
然后,run
函数将高级IO
类型给出的IO操作描述转换为可由运行时系统运行的实际IO操作(IO.Primitive
)
以下是您的“你好,世界!”程序的外观:
open import IO
main = run (putStrLn "Hello, world!")
如果您想编译您的程序,请确保安装了
agda lib ffi
(在agda stdlib的ffi
目录中运行cabal install
)。然后,您可以使用Emacs命令C-C-x C-C
实际编译您正在使用的模块。太好了,谢谢。(所有这些提示都是必不可少的:)我还需要升级到标准库的v0.8.1,以避免。顺便说一句,现在出现在我的项目中的MAlonzo
目录是怎么回事?编译器的工作原理是创建Haskell源代码(.hs
),然后在其上运行GHC。MAlonzo
目录是存储此代码的地方(也包括面文件、对象文件等)。对。因此,观察Agda程序效果的唯一方法是编译成二进制文件,然后运行二进制文件——没有GHCi中的“交互式”(基于REPL)等价物。