在GHCi提示符中运行IO
操作时,它会自动运行操作并显示结果,这很不错,但不适合尝试了解IO
和非IO
之间差异的学生。有没有办法改变GHCi的配置以便它运行动作,但是显示类似<<IO Int action>>
的内容?更像ST动作的结果(但应该执行动作):
现在确实如此:
> return 1 :: IO Int
1
> return 1 :: ST s Int
<<ST action>>
我想:
> return 1 :: IO Int
<<IO Int action>>
> putStrLn "bla"
bla
<<IO () action>>
修改:
IO
可能是GHCi专门处理的唯一内容,ST
实际上有Show (ST s a)
的实例返回"<<ST action>>"
。因此,如果我可以禁用IO
的这种特殊处理,那就足够了。IO
类型,但是解释器不会运行该操作)。如果GHCi能够以某种方式自动包装IO
动作,那将是一种选择。答案 0 :(得分:1)
这是一个有趣的问题。我唯一能想到的就是编写某种自定义前奏模块,它可以导出一个名为IO
的类型,但不是&#34;&#34;&#34;&#34; GHCi特殊外壳的I / O型。
当然,除非学生记得输入这个而不是真正的前奏,否则这根本没有帮助。我想你可以把它写进GHCi配置文件,但是......好吧,它当然不是完美的。
我能想到的另一种方法是使用GHC-API自己基本上重新实现GHCi。但这听起来像 waaaay 太多的工作......