私はどこにでもこの回答を見つけることができなかったのに驚いています。エラー関数の呼び出しを捕捉(無視)する方法は?
私はroguelikeを書いていますが、ncursesライブラリのかなり良いラッパーであるhackageのncursesライブラリを使用しています。今、ncursesには、右下の文字を書き込もうとすると、その文字を次の文字に移動しようとすると、どこにも移動しないため、失敗します。無視できるエラー値を返します。
私の問題は、haskell ncursesライブラリライターは、すべての呼び出しでエラーを忠実にチェックし、1つがある場合、エラー "drawText:etcなど"を呼び出します。
これを回避するために、cやpythonのような他の言語では、エラーを無視したり、例外を無視したりすることが強制されますが、私の人生にとっては、それをどうやってhaskellで行うのか分かりません。エラー機能は回復できませんか?
ライブラリをローカルに変更して、その機能のエラーをチェックしないようにしますが、それは嫌です。私はカーソルを動かさずに最後の文字を描くことができる任意の回避策にもオープンしていますが、それは可能だとは思いません。
"catch" [1]のHoogle。 2番目のリンクダウン。 [1] http://haskell.org/hoogle/?hoogle=catch –
残念ながら問題のエラーはIOモナドにありません。まあ、それはIOで始まり、次にCursesモナドであるrunCurses、次にupdateMindであるupdateWindowに行きます。したがって、私はポールの答えがうまくいくとは思わない。しかし、ルキーは潜在的可能性があるように見えます。私が家に帰ると、私はそれを試していきます。 –
ncursesを見ている私はそれがうまくいかないと感じています。 'drawText'は' error'を呼び出さず、C関数に直接委譲します。そして、それは 'ReaderT Window IO a' =' Window - > IO a'である 'Update'モナドで返されるので、' unsafeCleanup'はその*関数*を生成するときにエラーが発生したときにのみ動作します。アクションを実行している(ありそうもない)。あなたの選択肢は、IOのエラーをトップレベルでキャッチするか、cursesソースを開いて、よりローカルな 'catch'関数を注入させることです。 (これは簡単に行うことができ、カプセル化を破るだけです) – luqui