<div dir="ltr"><div>What about something like:</div><div><br></div><div><span style="font-size:13px">import Data.IORef ( IORef, newIORef, readIORef, writeIORef )</span></div><div><span style="font-size:13px"><br></span></div><div><span style="font-size:13px">newCounter :: IO (IO Int)</span></div><div><span style="font-size:13px">newCounter = do</span></div><div><span style="font-size:13px">  counterRef <- newIORef 0 :: IO (IORef Int)</span></div><div><span style="font-size:13px">  let getCount :: IO Int</span></div><div><span style="font-size:13px">      getCount = do</span></div><div><span style="font-size:13px">        count <- readIORef counterRef</span></div><div><span style="font-size:13px">        writeIORef counterRef (count + 1)</span></div><div><span style="font-size:13px">        return count</span></div><div><span style="font-size:13px">  return getCount</span></div><div><span style="font-size:13px"><br></span></div><div><span style="font-size:13px">The user calls this function which creates the cache and returns the stateful function. You can use MVars instead of IORefs if you want it to work concurrently.</span></div></div><br><div class="gmail_quote"><div dir="ltr">On Sun, Jul 8, 2018 at 2:29 AM Dennis Raddle <<a href="mailto:dennis.raddle@gmail.com">dennis.raddle@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>In this one use case, there might be a simpler solution, but I have encountered lots of situations in which a particular algorithm could benefit from an associated stored cache of information. The most natural way to write an algorithm, sometimes, is in terms of its past decisions or past state of the program, interacting with current state.</div><div><br></div><div>D<br></div>​</div>
_______________________________________________<br>
Haskell-Cafe mailing list<br>
To (un)subscribe, modify options or view archives go to:<br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a><br>
Only members subscribed via the mailman list are allowed to post.</blockquote></div>