agda - 如何在 Agda 中创建一个“do”块
问题描述
我有一些在 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 中工作?
解决方案
我不知道是什么Common.IO
。使用标准库,您可以编写:
open import IO
open import Codata.Musical.Notation
main = run do
♯ putStrLn "A string"
♯ putStrLn "second string"
有趣♯_
的是我们所说的乐谱:IO
导致潜在的无限计算,所以我们必须使用共归纳类型。
但是请注意,标准库中的 IO 是在将 do 符号添加到 Agda 之前创建的,所以如果它们有点兼容,那只是偶然。坚持>>=可能会更好(并尝试尽快编写纯代码,仅在边界处使用 IO)。
推荐阅读
- python - 使用 Pandas 绘制烛台图
- javascript - 当我们使用不带任何参数的 usestate(在 React 钩子中)时会发生什么?
- bash - 错误:[:status_code:bash 中预期的整数表达式
- javascript - 您如何从函数访问该对象的函数的对象(this.someProperty)的属性?
- java - 使用java流比较两个对象列表和字段
- python - 在某些列上交错 2 个数据帧
- javascript - 将整个反应组件转换为功能齐全的 HTML 文件
- c# - 如何根据字符串而不是表格行检查权限?
- ios - 在 Xamarin Forms 中减小 UISwitch 的大小不起作用
- javascript - NodeJs 正在发送空响应