Hi,

I'm making my first attempt at using some C code in my Haskell program. I need it because I have a large amount of small constant tables, and GHC takes ages to compile the if I use ordinary lists (and the object file gets huge). If there's any way of achieving this without going to C, I'd be interested to know.

My question is about how to compile a library that contains C code. At the end of this message is a simple example of an 'increase' function. To compile, I run

  ghc Increase.hs --make -o increase increase.c

and everything works as expected. But then when I want to load the example in GHCi, I need to give the object file at the command line

  ghci Increase increase.o

or I get "unknown symbol `increase'" when I try to run main. It feels a bit awkward to have to list the object files every time I want to run GHCi. Is there any way of avoiding that? There must be, because if I install the files as a Cabal library, I can fire up GHCi without mentioning any object files. But I don't want to go through cabal every time I want test some part of my code.

Thanks for any help,

/ Emil



----------------

increase.h:

  int increase(int x);



increase.c:

  #include "increase.h"

  int increase(int x) {
    return x+1;
  }



Increase.hs:

  {-# INCLUDE "increase.h" #-}
  {-# LANGUAGE ForeignFunctionInterface #-}

  import Foreign.C

  foreign import ccall "increase.h increase" inc :: CInt -> CInt

  main = print (inc 2, inc 20)

----------------


_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to