type Bar*[T] {.incompleteStruct.} = object type Foo* {.union.}[T] = object data: ptr T type Tuple* {.union.}[T, E] = object a: ptr T b: ptr E type Indirection*[T] = Tuple[T, float32] proc root*(a: Foo[int32], b: Foo[float32], c: Bar[float32], d: Foo[Bar[float32]], e: Bar[Foo[float32]], f: Bar[Bar[float32]], g: Tuple[Foo[float32], float32], h: Indirection[float32]) {.importc: "root".}