summaryrefslogtreecommitdiff
path: root/examples/split.rs
diff options
context:
space:
mode:
Diffstat (limited to 'examples/split.rs')
-rw-r--r--examples/split.rs20
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"));
+}