language-c-inline

Inline C & Objective-C code in Haskell for language interoperability

https://github.com/mchakravarty/language-c-inline/

Latest on Hackage:0.7.11.0

This package is not currently in any snapshots. If you're interested in using it, we recommend adding it to Stackage Nightly. Doing so will make builds more reliable, and allow stackage.org to host generated Haddocks.

BSD-3-Clause licensed by Manuel M T Chakravarty

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.