This library provides inline C & Objective-C code using GHC's support for
quasi-quotation. In particular, it enables the use of foreign libraries
without a dedicated bridge or binding. Here is a tiny example:
nslog :: String -> IO ()
nslog msg = $(objc ['msg :> ''String] (void [cexp| NSLog(@"Here is a message from Haskell: %@", msg) |]))
For more information, see https://github.com/mchakravarty/language-c-inline/wiki.
Known bugs: https://github.com/mchakravarty/language-c-inline/issues
New in 0.7.10: Distinction between Class
(NSObject pointers) and Struct
(C pointers) in both hints and marhsallers.
New in 0.7.9: C wrapper names include the filename to disambiguate linker symbols.
New in 0.7.8: (1) Record marshalling; (2) foreign pointer-class marshalling; (3) custom type
marshallers; (4) marshall raw pointer types. Generated _objc.m files now always include "HsFFI.h"
(as the tool can generate type names declared in that header). Marshals Bool
as BOOL
. Marshal Int
and Word
to NSInteger
and NSUInteger
, respectively.
New in 0.6.0: Introduction of explicit marshalling hints (for more flexibility and support of
GHC 7.8's untyped Template Haskell quotations)
New in 0.5.0: Marshalling of numeric types
New in 0.4.0: Maybe types are marshalled as pointers that may be nil & bug fixes.
New in 0.3.0: Boxed Haskell types without a dedicated type mapping are marshalled using stable
pointers.
New in 0.2.0: Support for multiple free variables in one inline expression as well
as for inline code returning void
.
New in 0.1.0: We are just getting started! This is just a ROUGH AND
HIGHLY EXPERIMENTAL PROTOTYPE.