use typle::typle; impl TupleA<()> {} impl TupleA<(u32,)> {} impl TupleA<(u32, u32)> {} impl TraitB for TupleB<()> where (): Debug, {} impl TraitB for TupleB<(T0,)> where (T0,): Debug, T0: Extract, T0::Output: AsRef, {} impl TraitB for TupleB<(T0, T1)> where (T0, T1): Debug, T0: Extract, T1: Extract, T0::Output: AsRef, T1::Output: AsRef, {} impl Extract for TupleC<(T0,)> where (S0,): Debug, T0: Extract>, (T0,): Debug, {} impl Extract for TupleC<(T0, T1)> where (S0, S1): Debug, S1: Extract, T0: Extract>, (T0, T1): Debug, {} impl TraitD for TupleD where T0: Mul, T0: AsRef, F: Fn((T0,)) -> (T0,), { fn g() { let f: TupleD = TupleD::::new(); ::output_to_bytestream(); } } impl TraitD for TupleD where T0: Mul, T1: Mul, T1: AsRef, F: Fn((T0, T1)) -> (T0, T1), { fn g() { let f: TupleD = TupleD::::new(); ::output_to_bytestream(); } }