我有一些代码在 Haskell 中工作,我想将其转换为 Agda。
\n\n这是哈斯克尔代码
\n\nmain = do\n putStrLn "A string"\n putStrLn "second string"\nRun Code Online (Sandbox Code Playgroud)\n\n输出是
\n\nA string\nsecond string\nRun Code Online (Sandbox Code Playgroud)\n\n我尝试将其转换为 Agda
\n\nopen import Common.IO\n\nmain = do\n putStrLn "A string"\n putStrLn "second string"\nRun Code Online (Sandbox Code Playgroud)\n\n但我刚刚收到错误消息
\n\n\'_>>_ needs to be in scope to desugar \'do\' block\'\nRun Code Online (Sandbox Code Playgroud)\n\n(完整错误的屏幕截图:https ://i.stack.imgur.com/pS3Ty.jpg )
\n\n编辑:这是我最好的猜测,它显然行不通,但我是 Agda 的新手......有什么想法吗?
\n\nopen import Common.IO\n\n_>>_ : ? \xe2\x86\x92 ? \xe2\x86\x92 ?\n??? = ???\n??? = ???\n\nmain = do\n putStrLn "A string"\n putStrLn "second string"\nRun Code Online (Sandbox Code Playgroud)\n\n...如何让我的代码在 Agda 中运行?
\n我不知道是什么Common.IO。使用标准库,您可以编写:
open import IO\nopen import Codata.Musical.Notation\n\nmain = run do\n \xe2\x99\xaf putStrLn "A string"\n \xe2\x99\xaf putStrLn "second string"\nRun Code Online (Sandbox Code Playgroud)\n\n有趣\xe2\x99\xaf_的是我们所说的乐谱:IO导致潜在的无限计算,所以我们必须使用共归纳类型。
但请注意,标准库中的 IO 是在 do 表示法添加到 Agda 之前创建的,因此如果它们在某种程度上兼容,那只是偶然的。最好坚持>>=(并尝试尽快编写纯代码,仅在边界处使用 IO)。
\n