擅长:python、mysql、java
<p>我现在还太早,不能及时理解你的算法。但如果我没看错问题,你可以用lazy ST。这里有个小例子:</p>
<pre><code>import Control.Monad.ST.Lazy
import Data.STRef.Lazy
generator :: ST s [Integer]
generator = do
r <- newSTRef 0
let loop = do
x <- readSTRef r
writeSTRef r $ x + 1
xs <- loop
return $ x : xs
loop
main :: IO ()
main = print . take 25 $ runST generator
</code></pre>
<p>它正是从维护其状态的ST操作创建一个延迟结果流。在</p>