2015-10-03 8 views
15

自動的にそれを促しGHCiの中IOアクションを実行しなくIOと非IOの違いを理解しようとする学生のための、これはいいです、アクションを実行し、結果を示しています。 GHCiの設定を変更してアクションを実行する方法はありますか?代わりに<<IO Int action>>のようなものを表示しますか? STアクション(ただし、アクションが実行されなければならない)のためのより多くの結果のようなもの:IO結果のGHCiでの印刷を無効にしますか?

今それがない:

> 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は実際に"<<ST action>>"を返しShow (ST s a)のインスタンスを持っています。だからもし私がIOのこの特別な扱いを無効にすることができれば、それで十分でしょう。
  2. 許可されたコードの変更については、評価された式を手動で変更することはオプションではありません。ライブラリの変更があるかもしれませんが、私はそれをしたくないでしょう(私はラップを作成したと考えましたIOタイプですが、インタプリタはアクションを実行しません)。 GHCiが何とか自動的にIOアクションをラップすることができれば、それはオプションになります。
+0

は許容コードの変更はありますか?あなたはあなたが持っているIO値を最初に値を実行し、あなたが好きなものを印刷する別のものとラップすることができます。 – usr

+0

usr:評価対象の式ではありません。質問の編集を参照してください。 –

答えて

1

これは興味深い質問です。私が思いつくことができるのは、IOというタイプをエクスポートする何らかのカスタムプレリュードモジュールを書くことですが、GHCiが特別なケースであるI/Oタイプではありません。学生が本当の前奏曲ではなく、これをインポートするために覚えていないかぎり、もちろん

が、これは全く何の助けではありません。あなたはGHCi設定ファイルに書き込むことができると思いますが...確かに完璧ではありません。

私は考えることができる唯一の他の方法は、基本的にGHCiの自分を再実装するGHC-APIを使用することです。しかし、それはメーリングリストのあまりにも多くの仕事のように聞こえる...

関連する問題