I tried this using timeout, but was never able to get it to work. The timeout doesn&#39;t behave like I expect. I can take several seconds for it to timeout, even with very low timeouts.<br><br>Any ideas?<br><br>- Job<br><br>
module Main where<br><br>import Data.IORef<br>import System.Timeout<br>import System.IO.Unsafe<br><br>tailScan f (x:xs) = resultList<br>  where<br>    resultList = x : zipWith f resultList xs<br><br>facts = 1 : tailScan (*) [1..]<br>
fac n = facts !! n<br><br><br>eterm x n = x^n / (fac n)<br>eseries x = fmap (eterm x) [0..]<br>ePrecisionList x = tailScan (+) $ eseries x<br><br>computeUntil t xs = do<br>
    a &lt;- newIORef undefined<br>
    timeout t $ sequence $ fmap (writeIORef a) xs<br>
    readIORef a<br><br>-- compute e for only 10 microseconds<br>e x = computeUntil 10 (ePrecisionList x)<br><br>main = do<br>  -- compute e<br>  print =&lt;&lt; e 1<br><br><br><br><div class="gmail_quote">On Fri, Aug 28, 2009 at 9:01 AM, Mitar <span dir="ltr">&lt;<a href="mailto:mmitar@gmail.com" target="_blank">mmitar@gmail.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Hi!<br>
<br>
Ups, missed save button and pressed send. ;-)<br>
<br>
So I am not really sure if this is correct term for it but I am open<br>
to better (search) terms.<br>
<br>
I am wondering if it is possible to make a time constrained<br>
computation. For example if I have a computation of an approximation<br>
of a value which can take more or less time (and you get more or less<br>
precise value) or if I have an algorithm which is searching some<br>
search-space it can find better or worse solution depending how much<br>
time you allow. So I would like to say to Haskell to (lazily, if it<br>
really needs it) get me some value but not to spend more than so much<br>
time calculating it.<br>
<br>
One abstraction of this would be to have an infinity list of values<br>
and I would like to get the last element I can get in t milliseconds<br>
of computational time.<br>
<br>
One step further would be to be able to stop computation not at<br>
predefined time but with some other part of the program deciding it is<br>
enough. So I would have a system which would monitor computation and a<br>
pure computation I would be able to stop. Is this possible? Is it<br>
possible to have a pure computation interrupted and get whatever it<br>
has computed until then?<br>
<br>
How could I make this? Is there anything already done for it? Some<br>
library I have not found?<br>
<br>
Of course all this should be as performance wise as it is possible.<br>
<br>
So the best interface for me would be to be able to start a pure<br>
computation and put an upper bound on computation time but also be<br>
able to stop it before that upper bound. And all this should be as<br>
abstracted as it is possible.<br>
<font color="#888888"><br>
<br>
Mitar<br>
</font><div><div></div><div>_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org" target="_blank">Haskell-Cafe@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br>
</div></div></blockquote></div><br>