当IO在GHCi中运行动作时,它会自动运行动作并显示结果,这很好,但对于试图理解IO与非之间差异的学生而言并非如此IO.有没有办法改变GHCi的配置,以便它运行动作,但显示类似的东西<<IO Int action>>?更像是ST动作的结果(但应该执行动作):
现在它做到了:
> return 1 :: IO Int
1
> return 1 :: ST s Int
<<ST action>>
Run Code Online (Sandbox Code Playgroud)
我想要:
> return 1 :: IO Int
<<IO Int action>>
> putStrLn "bla"
bla
<<IO () action>>
Run Code Online (Sandbox Code Playgroud)
编辑:
IO可能是GHCi专门处理的唯一事情,ST实际上有Show (ST s a)返回的实例"<<ST action>>".所以,如果我可以禁用这种特殊处理IO就足够了.IO类型,但是解释器不会运行该操作).如果GHCi能够IO以某种方式自动包装动作,那将是一种选择.这是个有趣的问题。我唯一能想到的就是编写某种自定义 prelude 模块,该模块导出名为 的类型IO,但这不是 GHCi 特殊情况下的“I/O 类型”。
当然,这根本没有任何帮助,除非学生记得导入这个而不是真正的前奏。我想你可以将其写入 GHCi 配置文件,但是......好吧,它肯定不完美。
我能想到的唯一其他方法是使用 GHC-API 自己重新实现 GHCi。但这听起来工作量太大了......
| 归档时间: |
|
| 查看次数: |
531 次 |
| 最近记录: |