Extended AbstractTemplate Haskell, the Glasgow Haskell Compiler's (GHC) meta programming framework [4], is widely to used define macros, code generators, or even code transformation engines. Mainland [2] recently extended Template Haskell with support for quasiquoting arbitrary programming languages, which greatly simplifies writing code generators that produce complex C, CUDA, OpenCL, or Objective-C code by writing code templates in the syntax of the generated language-for example, Accelerate, an embedded language for GPU programming, makes extensive use of that facility to generate CUDA GPU code [3].In this demo, I will show that quasiquoting also enables a new form of language interoperability. Here, a simple example using Objective-C: nslog :: String -> IO () nslog msg = $(objc ['msg :> ''String] (void [cexp| NSLog(@"A message from Haskell: %@", msg) |]))The expression splice $(objc ...) introduces an inline Objective-C expression into Haskell code. It's first argument (which here is ['msg :> ''String]) is a list of all Haskell variables used and automatically marshalled to Objective-C code. The syntax 'msg is Template Haskell to quote a variable name and ''String to quote a type constructor name. The infix operator (:>) is used to annotate variables with marshalling information, in this case, the type used for type-guided marshalling. The quasiquoter [cexp|...|] quotes C expressions, returning a representation of the quoted expression as an abstract syntax tree. Here, the expression calls the function NSLog(), which on OS X and iOS writes a log message.As Objective-C is a strict superset of ANSI C, this works for inline ANSI C code as well. With appropriate support by a quasiquotation library, this approach could also be used for other languages, such as Java or C++. It might even be plausible to inline scripting languages, such as Ruby or Python.