[Haskell-cafe] Linking in Large ByteStrings
Judah Jacobson
judah.jacobson at gmail.com
Fri Jan 1 16:19:42 EST 2010
On Fri, Jan 1, 2010 at 7:09 AM, Tom Hawkins <tomahawkins at gmail.com> wrote:
> I have a large tarball I want to link into an executable as a
> ByteString. What is the best way to do this? I can convert the
> tarball into a haskell file, but I'm afraid ghc would take a long time
> to compile it. Is there any way to link constant data directly with
> ghc? If not, what's the most efficient way to code large ByteStrings
> for fast compilation?
Possibly the simplest is to use unsafePackAddress or unsafePackAddressLen:
{-# LANGUAGE MagicHash #-}
module Const where
import Data.ByteString.Unsafe as U
import System.IO.Unsafe
my_bstr = unsafePerformIO $ U.unsafePackAddress "abcdefg"#
This trick of embedding raw strings (of type Addr#) is how happy and
alex store their parser lookup tables in the modules they generate.
I haven't seen any performance issues with it myself.
Hope that helps,
-Judah
More information about the Haskell-Cafe
mailing list