static constants -- ideas?
dons at galois.com
Sun Feb 24 03:07:08 EST 2008
> 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
> 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,
> 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
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.
More information about the Glasgow-haskell-users