[Haskell-cafe] containers and maps

John Lato jwlato at gmail.com
Thu Aug 13 16:43:43 EDT 2009


On Thu, Aug 13, 2009 at 1:51 PM, Jake McArthur<jake.mcarthur at gmail.com> wrote:
> John Lato wrote:
>>
>
>> This might work with UVector (I intend to try it this evening); I
>> don't know how well the fusion framework will hold up in class
>> dictionaries.
>
> Do report back, as I am curious as well.

I have just recently hacked together a small test.  The code is at
http://inmachina.net/~jwlato/haskell/testUVector.hs

The task is to generate a list of 1 million Ints (really 1e6-1), map a
multiply by 2, and check to see if any values equal 0.  The uvector
code is (essentially):

> let res = anyU (== ( 0:: Int)) . mapU (* 2) . enumFromToU 1 $ 1000000

and by itself runs in a small fraction of a second.  Technically the
start and stop values are specified on the command line, but these are
the values I predominantly used.

Here are results for some other modes:

ListLike.map: significantly slower, and runs out of memory (memory
request failed)
ListLike.rigidMap: appears to be the same as using mapU directly
mapReduce:  significantly slower (the 1e6 element test completed after
about an hour), but ran in a very small amount of memory.

It looks like GHC was able to see through the rigidMap function at
least, but I don't know if this would still work with the instance
defined in another file.

Cheers,
John


More information about the Haskell-Cafe mailing list