IO操作後に発生する相互に依存する純粋な計算をインテリジェントに遅延インターリーブするルートがありますか?私は2つの設定ファイルを読んでいます。最初のファイルは2番目のファイルですが、2番目のファイルは最初のファイルの解釈を決定します。IOモナド内に含まれているレイジーなインターリーブ純粋計算
import qualified Data.ByteString.Char8 as BS
main = do
...
f_state <- BS.readFile fn_state
let cfg_state' = procStateConfig' f_state
f_base <- BS.readFile $ cfg_base_fn cfg_state'
let cfg_base = procBaseConfig f_base
let cfg_state = procStateConfig f_state cfg_base
...
それは他からの情報を必要とするまで、それぞれが実行されるという点で、私はprocBaseConfig
とprocStateConfig
は相互再帰することによって、この余分な機能procStateConfig'
を書いて避けることができれば、私は興味があります。
cfg_base
に依存するすべてのものを無視すると、特にprocStateConfig'
をprocBaseConfig f_state undefined
に置き換えることができますが、これはあまりうっとりすることはありません。
私がレコードcfg_state
のcfg_base_fn
の要素が2番目のBS.readFile
の要素を必要としない場合、これはうまくいくかもしれないと思っていますが、現在は見苦しくなります。とにかくproc..
のコールにはBS.readFile
コールを両方とも折り畳むことにします。
もしあなたが望むのであれば、 'mfix'を使って' DoRec'を再フォーマットすることで回避できます。 – singpolyma