どうしていいかわからない問題があります。誰かが特定の問題について私を助けてくれるかどうか尋ねようとしていましたが、より一般的な質問をすることができ、結果としてより一般的な理解が得られることを願っています. うまくいけば。だからここに行きます:
たとえば、スペース リークなどの明らかな問題が発生するため、プログラムがあまりにも怠惰な場合は、通常は明らかです。逆の問題があります: 私のプログラムは厳しすぎます。私は結び目を作ろうとし ていますが、私がやろうとしている特定のことが、私が必要とする怠惰をどうにかして打ち負かすことがわかりました. 私の一般的な質問は、不要な厳密さをどのようにデバッグするのですか?
完全を期すために、ここに私の具体的なケースを示します。私はRWS
、ライター コンポーネントがマップにデータを入力し、リーダー コンポーネントがそのマップの最終状態を観察します。マップへの入力が完了するまで、このマップに対して厳密なことを行うことはできません。次のように、マップ内の値を検索することは問題ないようです。
do
m <- ask
val <- m ! key
doSomething val -- etc.
しかし、 の(!)
使用error
に失敗します。代わりに、モナドの の使用に失敗することを好みfail
ます。だから私は次のようなことをしたいと思います:
do
m <- ask
maybe
(fail "oh noes")
(doSomething)
(lookup key m)
これにより、私のプログラム<<loop>>
は理解できません。これがを使用するよりも厳密であるようには思え(!)
ませんが、明らかに私は間違っています...