Haskell 是否在GHCi中禁用IO结果打印?

Haskell 是否在GHCi中禁用IO结果打印?,haskell,ghci,Haskell,Ghci,当在GHCi提示符下运行IO操作时,它会自动运行操作并显示结果,这很好,但对于试图理解IO和非IO之间区别的学生来说,这是不合适的。是否有办法更改GHCi的配置,使其运行操作,但显示类似于的内容?类似于ST操作的结果(但应执行操作): 现在它做到了: > return 1 :: IO Int 1 > return 1 :: ST s Int <<ST action>> >返回1::IO Int 1. >返回1::ST s Int 我想: > retu

当在GHCi提示符下运行
IO
操作时,它会自动运行操作并显示结果,这很好,但对于试图理解
IO
和非
IO
之间区别的学生来说,这是不合适的。是否有办法更改GHCi的配置,使其运行操作,但显示类似于
的内容?类似于ST操作的结果(但应执行操作):

现在它做到了:

> return 1 :: IO Int
1
> return 1 :: ST s Int
<<ST action>>
>返回1::IO Int
1.
>返回1::ST s Int
我想:

> return 1 :: IO Int
<<IO Int action>>
> putStrLn "bla"
bla
<<IO () action>>
>返回1::IO Int
>putStrLn“bla”
布拉
编辑

  • 我刚刚发现,
    IO
    可能是GHCi专门处理的唯一东西,
    ST
    实际上有
    Show(ST s a)
    的实例,它返回
    。因此,如果我可以禁用对
    IO
    的这种特殊处理,可能就足够了
  • 至于允许的代码更改:手动更改计算表达式不是选项。库中的更改可能是,但我不希望这样做(我考虑过创建wrapped
    IO
    type,但解释器不会运行该操作)。如果GHCi能够以某种方式自动包装
    IO
    操作,这将是一个选项

  • 这是一个有趣的问题。我唯一能想到的就是编写某种自定义的prelude模块,它导出一个名为
    IO
    的类型,但它不是GHCi所特有的“I/O”类型

    当然,除非学生记得导入这个而不是真正的前奏曲,否则这毫无帮助。我想您可以将其写入GHCi配置文件,但是。。。当然,这并不完美


    我能想到的唯一其他方法是使用GHC-API自己基本上重新实现GHCi。但这听起来好像太多工作了……

    代码更改可以接受吗?您可以使用另一个IO值来包装您拥有的IO值,该IO值首先执行该值,然后打印您喜欢的内容。usr:对于要计算的表达式,请参阅我对问题的编辑。