trait Composite[Composite, Key, Init, Rest];
fn Composite::deconstruct[Composite, Key, Init, Rest; Composite[Composite, Key, Init, Rest]](composite: Composite) -> (Init, Rest);
fn Composite::reconstruct[Composite, Key, Init, Rest; Composite[Composite, Key, Init, Rest]](init: Init, rest: Rest) -> Composite;
impl tuple[C, I, R; Tuple[C, I, R]]: Composite[C, (), I, R];
impl object[C, K, I, R; Object[C, K, I, R]]: Composite[C, K, I, R];
impl cast_deconstruct[C, K, I, R; Composite[C, K, I, R]]: Cast[C, (I, R)];
impl cast_reconstruct[C, K, I, R; Composite[C, K, I, R]]: Cast[(I, R), C];