So here we have an elementary Rust construct.
let a = &[1,2,3,4];
let b = &[5,6,7,8];
a and b are slices, right. Says so right here in the manual.. So then I write:
`let c = (a, b);`
So that should be a tuple of slices, correct? It's not.
Compiling playground v0.0.1 (/playground)
error[E0308]: mismatched types
> src/main.rs:17:21

17  tuple_of_slices(c); // this complains.
 ^ expected slice `[u32]`, found array `[u32; 4]`

= note: expected tuple `(&[u32], &[u32])`
found tuple `(&[u32; 4], &[{integer}; 4])`
For more information about this error, try `rustc explain E0308`.
error: could not compile `playground` due to previous error
So how did c become a tuple of fixed sized arrays?
This seems to be type inference getting confused. An explicit declaration
let c: (&[u32],&[u32]) = (a, b);
will fix the problem. It's puzzling that type inference got it wrong. All the info was available, and the only use made of the value put it into a function that expected (&[u32],&[u32])
.