[Haskell-cafe] FFI and GHCi

Corey O'Connor coreyoconnor at gmail.com
Tue Oct 21 12:49:15 EDT 2008


I would think there is a command you can embed in the .ghci file that
would automate the loading of the object files. But I didn't see one
on a quick scan of the manual:
http://www.haskell.org/ghc/docs/latest/html/users_guide/ghci-dot-files.html

-Corey O'Connor



On Tue, Oct 21, 2008 at 9:10 AM, Emil Axelsson <emax at chalmers.se> wrote:
> 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 at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>


More information about the Haskell-Cafe mailing list