[Haskell-cafe] deepSeq vs rnf
Björn Bringert
bringert at cs.chalmers.se
Mon Nov 13 08:47:20 EST 2006
Cale Gibbard wrote:
> On 22/10/06, Chad Scherrer <chad.scherrer at gmail.com> wrote:
>> Hi,
>>
>> I had posted this question a while back, but I think it was in the
>> middle of another discussion, and I never did get a reply. Do we
>> really need both Control.Parallel.Strategies.rnf and deepSeq? Should
>> we not always have
>>
>> x `deepSeq` y == rnf x `seq` y
>> ?
>>
>> Maybe there's a distinction I'm missing, but it seems to me they're
>> basically the same.
>
> I agree, they are the same. The Strategies library also gives much
> more general operations for working with strictness and
> parallelisation. That library seems to need more love, I think it's a
> great idea, but it doesn't really get noticed all that much. The
> Hierarchical libraries documentation for it is a little lacking -- it
> doesn't even provide a reference or link to the paper, and many of the
> combinators, as well as the general idea of how to use it are
> undocumented from there. It also spuriously contains an Assoc
> datatype, which if I recall correctly, was an example from the paper,
> but doesn't really belong in the library as far as I can tell. It
> would also be really nice to see the list of instances for the NFData
> class expanded to include other datatypes in the libraries, possibly
> also with compiler support for deriving, since it's mostly
> boilerplate.
I wanted to use the Strategies library and didn't understand much of it,
so I sat down and documented it. The darcs version,
http://darcs.haskell.org/packages/base/Control/Parallel/Strategies.hs
has my changes.
If noone objects, I could do some more clean-up, including:
- Add NFData instances for common data types, such as
- Maybe
- Either
- Data.Map.Map
- Data.Set.Set
- Data.Tree.Tree
- All Data.Int and Data.Word types
- Deprecate sSeq and sPar, as the code comments say that you should use
demanding and sparking instead.
- Deprecate these defintions, which seem to be examples or
Lolita-specific:
- Assoc
- fstPairFstList
- force
- sforce
If anyone has objections or further suggestions, let me know.
/Björn
More information about the Haskell-Cafe
mailing list