<div dir="ltr">Oh, I think I realized why that won't work. I think that a program in the State monad, for instance, must execute its computations sequentially. There is no way to "split" a State monad into separate lines of execution from within the monad. I think the answer is that I have to split my computation before my code enters into the State monad. So I need to call runState four times for four cores, or whatever. Something like that.<div><br></div><div>D</div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Jul 7, 2017 at 1:33 AM, Dennis Raddle <span dir="ltr"><<a href="mailto:dennis.raddle@gmail.com" target="_blank">dennis.raddle@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">I'm looking into using rpar and rseq from Control.Parallel.Strategies. The issue is that most of my code executes in a monad stack including StateT and ExceptT. Can I use the Eval monad at the root of the stack safely? <span class="HOEnZb"><font color="#888888"><div><br></div><div>D</div></font></span></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Jul 6, 2017 at 10:06 PM, Dennis Raddle <span dir="ltr"><<a href="mailto:dennis.raddle@gmail.com" target="_blank">dennis.raddle@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">thanks for the tip, that book is great... I'm reading it now, and it's an easy read, very clear explanations of laziness. I never understood laziness all that well before.<span class="m_-8086805945072253139HOEnZb"><font color="#888888"><div><br></div><div>D</div></font></span></div><div class="gmail_extra"><br><div class="gmail_quote"><span>On Thu, Jul 6, 2017 at 10:34 AM, Rein Henrichs <span dir="ltr"><<a href="mailto:rein.henrichs@gmail.com" target="_blank">rein.henrichs@gmail.com</a>></span> wrote:<br></span><div><div class="m_-8086805945072253139h5"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Please take a look at Simon Marlow's free book, <font size="2"><i>Parallel and Concurrent Programming in Haskell</i> (<a href="http://chimera.labs.oreilly.com/books/1230000000929" target="_blank">http://chimera.labs.o<wbr>reilly.com/books/1230000000929</a><wbr>). It will teach you a lot about... the things in the title.</font></div><div class="m_-8086805945072253139m_7087168887953595751HOEnZb"><div class="m_-8086805945072253139m_7087168887953595751h5"><br><div class="gmail_quote"><div dir="ltr">On Thu, Jul 6, 2017 at 10:21 AM Claude Heiland-Allen <<a href="mailto:claude@mathr.co.uk" target="_blank">claude@mathr.co.uk</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Dennis,<br>
<br>
On 06/07/17 17:53, Dennis Raddle wrote:<br>
> I have a program which does backtracking search in a recursive<br>
> function.  I followed the chapter in "Real World Haskell" to parallelize it.<br>
[snip]<br>
> There's no effect from the R.W.H. ideas. Can I get some suggestions as<br>
> to why?<br>
<br>
You can get timing and other useful diagnostics by compiling with<br>
-rtsopts and running with +RTS -s, no need to measure CPU time in your<br>
own program.<br>
<br>
> force :: [a] -> ()<br>
> force xs = go xs `pseq` ()<br>
>   where go (_:xs) = go xs<br>
>         go [] = 1<br>
<br>
This force doesn't do enough, it just walks the spine. Try this, which<br>
forces the elements as well as the shape:<br>
<br>
force :: [a] -> ()<br>
force xs = go xs `pseq` ()<br>
  where go (x:xs) = x `pseq` go xs<br>
        go [] = 1<br>
<br>
Thanks,<br>
<br>
<br>
Claude<br>
--<br>
<a href="https://mathr.co.uk" rel="noreferrer" target="_blank">https://mathr.co.uk</a><br>
______________________________<wbr>_________________<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-bi<wbr>n/mailman/listinfo/haskell-caf<wbr>e</a><br>
Only members subscribed via the mailman list are allowed to post.</blockquote></div>
</div></div><br>______________________________<wbr>_________________<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-bi<wbr>n/mailman/listinfo/haskell-caf<wbr>e</a><br>
Only members subscribed via the mailman list are allowed to post.<br></blockquote></div></div></div><br></div>
</blockquote></div><br></div>
</div></div></blockquote></div><br></div>