[Haskell-cafe] Re: Processing of large files

Ketil Malde ketil+haskell at ii.uib.no
Thu Nov 4 03:24:30 EST 2004

Tomasz Zielonka <t.zielonka at students.mimuw.edu.pl> writes:

>> Thank you. It works for me too, but I don't understand why and how ;-))
>> Could you explain?

I'm a bit puzzled by this discussion, as strictness of FiniteMaps have
rarely been (perceived to be?) a problem for me.

> Scott's solution forces (lookupFM a' x) to head normal form (or is it
> weak head normal form). This means that the value of type (Maybe v) is
> evaluated as much that it is known whether it is Nothing, Just _ or _|_
> (bottom). This is probably enough to evaluate the path from FiniteMap's
> tree root to x. 

If you insert a value into a FiniteMap, isn't the key necessarily
evaluated anyway?  Or is the problem that you can get a long chain of
unevaluated 'addToFM's?  The trick would then be to evaluate the FM
now and then (e.g. using a strict fold).

> However (lookupFM a' x) in head normal form can be still
> something like this:
>     Just <unevaluated: 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1>

I thought simply forcing evaluation of the value before inserting
would do it (i.e. something like 
      v `seq` addToFm fm k v

(modulo v needing deeper seq'ing, that is)  Am I missing something?

If I haven't seen further, it is by standing in the footprints of giants

More information about the Haskell-Cafe mailing list