diff options
Diffstat (limited to 'examples/split.rs')
| -rw-r--r-- | examples/split.rs | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/examples/split.rs b/examples/split.rs new file mode 100644 index 0000000..c2f6b82 --- /dev/null +++ b/examples/split.rs @@ -0,0 +1,20 @@ +use varihappy::{Tuple, Tuple1, Tuple2}; + +type HeadOf<T> = <T as Tuple1>::Item0; +type RestOf<T> = <<<<T as Tuple1>::Rest as Tuple>::Reversed as Tuple1>::Rest as Tuple>::Reversed; +type TailOf<T> = <<<T as Tuple1>::Rest as Tuple>::Reversed as Tuple1>::Item0; + +fn split<T>(tuple: T) -> (HeadOf<T>, RestOf<T>, TailOf<T>) +where + T: Tuple2, + <<T as Tuple1>::Rest as Tuple>::Reversed: Tuple1, +{ + let (head, rest) = tuple.split_into(); + let (tail, rest) = rest.rev().split_into(); + (head, rest.rev(), tail) +} + +fn main() { + let (_head, _rest, _tail): (i32, (), &str) = split((42, "foo")); + let (_head, _rest, _tail): (i32, (f64, bool, ()), &str) = split((42, 12.3, false, (), "foo")); +} |
