私が書いている Haskell プログラムで、初めて無限ループに遭遇しました。コードの非常に特定のセクションに絞り込みましたが、終了しない再帰定義がある場所を正確に特定できないようです。私は GHCi の :trace と :history に漠然と精通していますが、問題は、値に基づいてマップ内の何かを ing することによってマップが取得されるData.Map.Map
という意味で、私のコードの一部の分岐で a の再帰的な変更がかなり含まれていることです。に応じて別のマップで。ここでは詳細は重要ではありませんが、おそらくおわかりのように、これが絡み合った再帰的な方法で発生した場合、私の呼び出し履歴は、 map 、ments 、およびion に関連するさまざまな比較のすべてで完全に行き詰まります。x
adjust
x'
x'
lookup
adjust
insert
無限ループを見つけるためのより効率的な方法を推奨できる人はいますか? たとえば、通話履歴を単一のソース ファイルからの通話に制限すると、非常に役立ちます。