如何在Agda中创建“执行”块

时间:2019-04-14 14:33:52

标签: agda

我在Haskell中有一些代码可以工作,我想将其转换为Agda。

这是Haskell代码

main = do
  putStrLn "A string"
  putStrLn "second string"

输出为

A string
second string

我尝试用

将其转换为Agda
open import Common.IO

main = do
  putStrLn "A string"
  putStrLn "second string"

但是我只收到错误消息

'_>>_ needs to be in scope to desugar 'do' block'

(完整的错误截图:https://imgur.com/a/3lxdwR7

编辑:这是我最好的猜测,它显然行不通,但是我是Agda的新手,有什么想法吗?

open import Common.IO

_>>_ : ? → ? → ?
??? = ???
??? = ???

main = do
  putStrLn "A string"
  putStrLn "second string"

...如何使我的代码在Agda上运行?

1 个答案:

答案 0 :(得分:4)

我不知道Common.IO是什么。使用标准库,您可以编写:

open import IO
open import Codata.Musical.Notation

main = run do
  ♯ putStrLn "A string"
  ♯ putStrLn "second string"

有趣的♯_是我们所说的音符:IO可能导致无限的计算,因此我们必须使用共归类型。

但是请注意,标准库中的IO是在未将符号添加到Agda之前创建的,因此,如果它们兼容,那只是偶然。最好坚持>> = (并尝试尽快编写纯代码,仅在边界处使用IO)。