禁用在GHCi中打印IO结果?

时间:2015-10-03 19:49:08

标签: haskell ghci

在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>>

修改

  1. 我刚刚发现IO可能是GHCi专门处理的唯一内容,ST实际上有Show (ST s a)的实例返回"<<ST action>>"。因此,如果我可以禁用IO的这种特殊处理,那就足够了。
  2. 至于允许的代码更改:手动更改已评估的表达式不是一个选项。库中的更改可能是,但我不希望这样做(我考虑创建包装IO类型,但是解释器不会运行该操作)。如果GHCi能够以某种方式自动包装IO动作,那将是一种选择。

1 个答案:

答案 0 :(得分:1)

这是一个有趣的问题。我唯一能想到的就是编写某种自定义前奏模块,它可以导出一个名为IO的类型,但不是&#34;&#34;&#34;&#34; GHCi特殊外壳的I / O型。

当然,除非学生记得输入这个而不是真正的前奏,否则这根本没有帮助。我想你可以把它写进GHCi配置文件,但是......好吧,它当然不是完美的。

我能想到的另一种方法是使用GHC-API自己基本上重新实现GHCi。但这听起来像 waaaay 太多的工作......