在Agda-stdlib的IO中使用“ do”表示法的正确方法是什么?

时间:2019-03-15 14:32:18

标签: agda

我正在尝试将do-notation中的IOagda-stdlib一起使用,但是奇怪的是,_>>_的类型使用:{{ 1}}。因此,我需要在应用程序之间插入{B : Set a} (m₁ : ∞ (IO B)) (m₂ : ∞ (IO A)) → IO A,但这使用法很尴尬。例如,是构建打印行的程序所必需的:

此外,使用更多行对其进行扩展无法检查。我必须像这样放弃main : IO ⊤ main = do ♯ (putStrLn "hi") ♯ (return tt)

do-notation

哪个看起来糟透了。我可以重新定义main : IO ⊤ main = ♯ (♯ putStrLn "hi" >> ♯ putStrLn "ho") >> ♯ return tt _>>_

_>>=_

但是我假设这不是我期望的。所以,我想念什么吗?正确的使用方式是什么?

1 个答案:

答案 0 :(得分:1)

在标准库中实现IO之前要在Agda中添加do标记,因此在编写时并未考虑do标记。 Ulf的Agda prelude具有IO的最新实现,该实现确实支持do表示法。