This code:
(defn f [] ())
(def funs [f])
(defn main []
(let [i 0]
(match (Array.nth &funs i)
(Just fun) (fun)
Nothing (println* "No function found at index " i))))
emits this code twice in the resulting main.c:
// Depth 4
typedef struct {
union {
struct {
Lambda member0;
} Just;
// Nothing
char __dummy;
} u;
char _tag;
} Maybe__Fn___void;
#define Maybe__Fn___void_Just_tag 0
#define Maybe__Fn___void_Nothing_tag 1