`type T[a,b] = T1(a) | T2(b)` `type T_Int[b] = T3(Int) | T4(Int, Int) | T5(b)` For the types `T[Int, Bool]` and `T_Int[Bool]`, the corresponding structures in C are named as `T_Int_Bool`. So, the generated code is not valid C code.