... https://github.com/wlav/cppyy (.require [library [lux (.except) [program (.only program)] ["[0]" ffi (.only import)] ["[0]" debug] [abstract [monad (.only do)]] [control ["[0]" maybe (.use "[1]#[0]" monad)] ["[0]" try (.only Try)] ["[0]" exception (.only Exception)] ["[0]" io (.only IO io)]] [data ["[0]" product] [text ["%" \\format (.only format)] [encoding ["[0]" utf8]]] [collection ["[0]" array (.only Array)]]] [math [number ["n" nat] ["i" int] ["[0]" i64]]] ["[0]" world ["[0]" file] ["[1]/[0]" environment]] [meta [macro ["^" pattern] ["[0]" template]] [compiler [target ["_" c++ (.only) [":" type]]] [reference [variable (.only Register)]] [language [lux [program (.only Program)] [translation (.only Host)] [analysis [macro (.only Expander)]] ["[0]" phase (.only Operation Phase) ["[0]" extension (.only Extender Handler) ["[0]" analysis ["[1]" js]] ["[0]" translation ["[1]" js]]] [translation ["[0]" reference] [c++ ["[0]" runtime] ["[0]" type] ["[0]" primitive] ["[0]" complex]]]]]] [default ["[0]" platform (.only Platform)]] [meta ["[0]" cli] ["[0]" context] [archive (.only Archive) ["[0]" unit]] ["[0]" packager ["[1]" script]]]]]]] [program ["/" compositor]]) (import cppyy "[1]::[0]" ("static" cppdef [Text] "io" Bit) ("static" gbl (ffi.Object Any))) (def standard_out (_.global [_.standard "cout"] (list))) (def \n (_.global [_.standard "endl"] (list))) (def (print it) (-> _.Expression _.Statement) (|> standard_out (_.<< it) (_.<< \n) _.;)) (with_expansions [ "say_hello"] (def _ (program [] (do io.monad [? (cppyy::cppdef [(_.code (all _.then runtime.declaration (_.include "iostream") (_.function (_.local ) (list) (list) :.void (all _.then (print (_.deref (runtime.host_value type.bit (runtime.simple type.bit (primitive.bit true))))) (print (_.deref (runtime.host_value type.i64 (runtime.simple type.i64 (primitive.i64 +123))))) (print (_.deref (runtime.host_value type.f64 (runtime.simple type.f64 (primitive.f64 -456.789))))) ... (print (_.deref (runtime.host_value type.text (runtime.simple type.text (primitive.text "YOLO"))))) ))))]) .let [_ (debug.log! (%.format "BEFORE " (%.bit ?)))] global (cppyy::gbl) .let [say_hello (as ffi.Function (.python_object_get# global)) _ (debug.log! "AFTER") _ (.python_apply# say_hello [])]] (in (debug.log! "Hello, C++"))))))