Malcolm Wallace wrote:
Stefan Karrmann <[EMAIL PROTECTED]> wrote:


can ghc compile huge tables into efficient code if they are constant
at compile time?


I have a related but different question.  If I have large, statically
defined tables of data e.g.

    table = listArray (0,max) [ [1,2,3,4]
                              , [5,6,7,8,9,10]
                              , [11,12,13]
                              ...
                              ]

i.e. no computation is required, can these be compiled directly to a
space-efficient lookup structure?  Compilers might do something
reasonable for large static strings of chars, but they cannot do the
same for arrays.  The trouble is that the Array types are abstract, so
one cannot use the natural literal constructor.

What I would really like is a syntax to statically construct an array,
without having to compute it from a list.  I'm not sure that even
Template Haskell can help here, since there is no normal form for it to
translate to.

This has always been a weakness in GHC, and perhaps in Haskell itself. In theory GHC could compile a completely static array declaration (like yours above) into a static array, but it doesn't. It's not trivial to do, because it involves unrolling the (recursive) definition of listArray, or perhaps some special-case code to spot array/listArray applied to static lists.

Happy & Alex use the hack of encoding static arrays as strings and using peek to access the data at runtime, FWIW.

Cheers,
        Simon
_______________________________________________
Haskell mailing list
Haskell@haskell.org
http://www.haskell.org/mailman/listinfo/haskell

Reply via email to