use core::ops::{Index, IndexMut};
use crate::ops::HasScalar;
pub trait ScalarTuple:
Sized + HasScalar + AsRef<[Self::Scalar]> + AsMut<[Self::Scalar]> + Index<usize> + IndexMut<usize>
{
const LEN: usize;
type Array: AsRef<[Self::Scalar]> + AsMut<[Self::Scalar]>;
fn splat(scalar: Self::Scalar) -> Self;
fn as_ptr(&self) -> *const Self::Scalar;
fn as_mut_ptr(&mut self) -> *mut Self::Scalar;
fn as_slice(&self) -> &[Self::Scalar];
fn as_mut_slice(&mut self) -> &mut [Self::Scalar];
fn to_array(self) -> Self::Array;
fn from_array(a: Self::Array) -> Self;
}