{-# LANGUAGE DataKinds #-} {-# LANGUAGE TypeOperators #-} module Extern where import Ivory.Language import Ivory.Compile.C.CmdlineFrontend x :: Uint8 x = extern "SOME_CONST" "some_other_header.h" putchar :: Def ('[Uint8] ':-> ()) putchar = importProc "putchar" "some_header.h" test :: Def ('[Uint8] ':-> ()) test = proc "test" $ \ c -> body $ call_ putchar c >> call_ putchar x >> retVoid runExtern :: IO () runExtern = runCompiler [cmodule] [] initialOpts { outDir = Nothing, scErrors = True } cmodule :: Module cmodule = package "Extern" $ do incl test incl putchar inclSym x