hint
パッケージを使用hackage
して、ユーザーが評価用のコード行を発行できる単純な環境を作成しようとしています(ghciのように)。入力行の一部に誤りがあると予想されます (eval
セッションがエラーで終了します)。誤った入力を無視する堅牢なセッションを作成するにはどうすればよいですか (または、エラーを報告しますが、他の入力を受け入れることができます)、以前の一貫した状態を維持できますか?
また、スタイルで使用したいと思います。do
つまりlet a = 3
、スタンドアロンの入力ラインが理にかなっています。
明確にするために:私は単一のeval
. 私がやりたいことは、いくつかのステップが失敗した後でも評価を継続できるようにすることです。また、モナドチェーンを段階的に拡張したいとghci
思います(あなたがそうしているように)。
言い換えれば、私はこのようなものが欲しいのですが、評価してエラー3
で止まらないことを除いて.undefined
runInterpreter $ setImports [ "Prelude" ] >> eval "undefined" >> eval "3"
より具体的には、次のようなことが可能になることを望みます。
runInterpreter $ setImports ... >> eval' "let a = (1, 2)" -- modifying context
>> typeOf "b" -- error but not breaking the chain
>> typeOf "a" -- (Num a, Num b) => (a, b)
私はこれが簡単に機能するとは思っていません。これはアイデアを示すためのものです。私は基本的にいくつかのコンテキストを構築したいと思います(ghciで行うように)。コンテキストに追加するたびに、失敗がない場合にのみコンテキストが変更されます。コンテキストを変更しようとするたびに、失敗がログに記録されるか、明示的に取得されます。