Proposal: Make GHC.Arr.listArray slightly stricter to allow fusion

Joachim Breitner mail at joachim-breitner.de
Thu Nov 13 11:33:22 UTC 2014


Hi,


Am Donnerstag, den 13.11.2014, 05:22 -0500 schrieb David Feuer:
> Currently, GHC.Arr.listArray is pretty lazy:
>
> listArray (1,3) $ [1,2,3] ++ undefined
>
> will work perfectly fine.
>
> This is actually lazier than the current array:
>
> array (1,3) $ [(1,1), (2,2), (3,3)] ++ undefined = undefined
>
> Unfortunately, I don't think it's possible to make listArray fuse with
> a list producer while preserving quite that level of laziness. If
> we're willing to be slightly stricter, however, I think everything
> works. Specifically, I propose that we allow
>
> listArray (length xs) (xs ++ _|_) = _|_>

given that
        listArray (1,3) xs = listArray (1,3) (take 3 (xs))
and take can fuse with a good producer (can it?), I would expect that
listArray can be made to fuse as good or as bad as take.

What precisely is the problem with the more lazy listArray?

Greetings,
Joachim





-- 
Joachim “nomeata” Breitner
  mail at joachim-breitner.dehttp://www.joachim-breitner.de/
  Jabber: nomeata at joachim-breitner.de  • GPG-Key: 0xF0FBF51F
  Debian Developer: nomeata at debian.org

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: This is a digitally signed message part
URL: <http://www.haskell.org/pipermail/libraries/attachments/20141113/d39e3cf8/attachment.sig>


More information about the Libraries mailing list