static constants -- ideas?

Don Stewart dons at galois.com
Sun Feb 24 03:07:08 EST 2008


jason.dusek:
>   I have an awkward programming problem -- I need to take a
>   dictionary, parse it, build a bunch of intermediate lists and
>   then make maps and tries out of the list. A "programming
>   problem" because it's taken me a fair amount of effort to pull
>   together the parser and list generator -- and "awkward"
>   because a 69000 item list, [(String, [(String, String)])],
>   does not compile under GHC (stack overflow). (It's not likely
>   to compile under anything else, either!)
> 
>   Members of #haskell have urged me to load the offending
>   material from a file; indeed, it only takes ten seconds to
>   parse the dictionary and build the lists, sort them and dump
>   them back out again -- but it offends my sensibilities. I
>   don't want to wait ten seconds to load my dictionary every
>   time.
> 
>   I could use the FFI, then I can make the trie and lists all in
>   C. That'd work great. My list likely uses too much RAM now,
>   anyways.
> 
>   I'm considering one other option though -- I wonder if I can
>   build large constants in GHC Core? If anybody has tried it --
>   or found some other way to make big huge constants in Haskell
>   -- I would sure like to know about it.

You can build large constant bytestrings, fwiw. They turn into an Addr#,
and GHC will leave them alone.

See, e.g. this regex testsuite, which has *lots* of bytestring
(overloaded) literals,

    http://code.haskell.org/~dons/code/pcre-light/tests/Unit.hs

Using the OverloadedStrings pragma.

This is approximately the same approach as Alex (the lexer generator)
takes with its lexing tables stored in an unboxed string literal.

-- Don


More information about the Glasgow-haskell-users mailing list