Io 向控制台输出Agda程序

Io 向控制台输出Agda程序,io,main,agda,Io,Main,Agda,我已经使用Agda 9个月了。我第一次发现自己想要“运行”(作为顶级可执行文件)一个打印字符串的Agda程序。叫我老古板 我可以编写一个计算字符串的程序,让Agda在交互模式(或Emacs)下显示字符串的值。但是字符串很长,并且嵌入了换行符。我想把它打印出来 作为比较,在GHCi中,我可以这样做: Prelude> putStrLn "hello, world!" hello, world! 但在Agda的交互模式下,我得到了以下信息: Main> putStrLn "hello,

我已经使用Agda 9个月了。我第一次发现自己想要“运行”(作为顶级可执行文件)一个打印字符串的Agda程序。叫我老古板

我可以编写一个计算字符串的程序,让Agda在交互模式(或Emacs)下显示字符串的值。但是字符串很长,并且嵌入了换行符。我想把它打印出来

作为比较,在GHCi中,我可以这样做:

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
)只是Haskell
IO
的代理,上层(
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)等价物。