Hi all,

I fear I might be unaware of something I should be.  Say I have a file objc_util.m with the following contents:

    #include <Foundation/Foundation.h>

    void ns_log(const char *s) {
      NSString *str = [NSString stringWithUTF8String:s];
      NSLog(@"%@", str);
    }

I also have a file Main.hs with contents:

    {-# LANGUAGE ForeignFunctionInterface #-}
    module Main where

    import Foreign.C.Types
    import Foreign.C.String

    foreign import ccall "ns_log" cNSLog :: CString -> IO ()

    nsLog s = withCString s cNSLog

I compile objc_util.m with:

    gcc -c objc_util.m

And then I try to open it up in GHCi.

    ghci objc_util.o Main.hs -framework Foundation

I add the flag '-frame Foundation' in the hopes that symbols in objc_util.o will get resolved
dynamically.

However I get:

    GHCi, version 7.8.3: http://www.haskell.org/ghc/  :? for help
    Loading package ghc-prim ... linking ... done.
    Loading package integer-gmp ... linking ... done.
    Loading package base ... linking ... done.
    Loading object (static) objc_util.o ... ghc: panic! (the 'impossible' happened)
      (GHC version 7.8.3 for x86_64-apple-darwin):
      Loading temp shared object failed: dlopen(/var/folders/pv/pfxcyy117v31vt6lsshtgr_w0000gn/T/ghc33546_0/ghc33546_1.dylib, 9):     Symbol not found: _OBJC_CLASS_$_NSString
      Referenced from: /var/folders/pv/pfxcyy1    17v31vt6lsshtgr_w0000gn/T/ghc33546_0/ghc33546_1.dylib
      Expected in: flat namespace
     in /var/folders/pv/pfxcyy117v31vt6lsshtgr_w0000gn/T/ghc33546_0/ghc33546_1.dylib

    Please report this as a GHC bug:  http://www.haskell.org/ghc/reportabug

However, I have found a work around to this. If I do this:

    ln -s /System/Library/Frameworks/Foundation.framework/Foundation Foundation.o

and then run

    ghci Foundation.o objc_util.o Main.hs

I get this:

    GHCi, version 7.8.3: http://www.haskell.org/ghc/  :? for help
    Loading package ghc-prim ... linking ... done.
    Loading package integer-gmp ... linking ... done.
    Loading package base ... linking ... done.
    Loading object (static) Foundation.o ... done
    Loading object (static) objc_util.o ... done
    final link ... done

Everything has worked! And I can happily run 'nsLog' from GHCi and have it appear in the
'Console' app.

However, it doesn't seem like I should have to do this. Where am I going wrong?

Sean