Defines a strategy for tupling A
and B
values, according to types A
and B
.
The actual implementation avoids nested tuples and eliminates Unit
, so that instead of ending with, e.g.,
the following type:
((Unit, Int), (((Unit, Unit), String)))
We just get:
(Int, String)
The following rules are implemented (by increasing priority):
- A, B -> (A, B)
- A, (B, C) -> (A, B, C)
- (A, B), C -> (A, B, C)
- (A, B), (C, D) -> (A, B, C, D)
- A, (B, C, D, E) -> (A, B, C, D, E)
- (A, B), (C, D, E) -> (A, B, C, D, E)
- (A, B, C), D -> (A, B, C, D)
- (A, B, C, D), E -> (A, B, C, D, E)
- (A, B, C, D, E), F -> (A, B, C, D, E, F)
- A, Unit -> A
- Unit, A -> A
- Companion:
- object
class Object
trait Matchable
class Any