在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
的内容,我可以用procBaseConfig f_state undefined
替换procStateConfig'
,但这并不是那么简单。
我想象如果我不需要记录cfg_state
的cfg_base_fn
元素进行第二个BS.readFile
,那么这可能会起作用,但目前看起来很困难。而且我更愿意将两个BS.readFile
调用合并到proc..
调用中。
mfix
来避免DoRec
。 - singpolyma