Strategies

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

Strategies

Alexei Kitaev
Dear Ryan,

Thanks a lot for your support and for pointing out a problem with my
approach to forcing the state. I was aware of this issue but I didn't
know there was a standard solution. It is indeed very natural to let
each type specify how to evaluate itself. I will try this technique on
the nearest occasion.

Incidentally, the link to Control.Parallel.Strategies from the latest
GHC User Guide is broken...

--Alexei

Ryan Ingram wrote:

> On Sat, Jan 9, 2010 at 2:23 AM, Alexei Kitaev <[hidden email]> wrote:
>> Reading the discussion related to your blog, I
>> realized that strict State is different in that it does not actually
>> force the state. But forcing can be achieved by wrapping all actions
>> with the following function:
>>
>> sState :: (s -> (a,s)) -> State s a
>> sState f = State $ \s -> case f s of
>>                             (a,s') -> s' `seq` (a,s')
>>
>> I hope that somebody will answer my other questions about the
>> operational semantics and optimizations.
>
> Hi Alexei, you have a ton of great points but I wanted to discuss an
> issue with this one.
>
> It's unusual that this is what you want either; since it only reduces
> the state to WHNF.  For example, if your state is a string, this only
> evaluates enough to know whether or not the string is empty at each
> step, and you can still get into trouble with code like this:
>
>    put ("xxx" ++ some_bad_computation)
>
> which leave bottoms inside of your state which won't show up until later.
>
> Several attempts to solve this problem exist, but the most commonly
> used one is the "rnf" strategy from Control.Parallel.Strategies, which
> uses a typeclass to allow each type to specify how to evaluate itself
> completely.
>
>   -- ryan
_______________________________________________
Haskell-Cafe mailing list
[hidden email]
http://www.haskell.org/mailman/listinfo/haskell-cafe