Syntax for a trait on a generic type with parameters

I probably wasn't explaining it right, as I've confused myself with all this genericness :slight_smile:

I ended up with something like this:



pub trait Transmogrify<DestType, SrcParameter, DestParameter>
    where Self: ParameterToSlice<SrcParameter>,
          DestType: ParameterFromSlice<DestParameter> {
    fn transmogrify<Callback>(&self, mut f: Callback) -> DestType
        where Callback: FnMut(SrcParameter) -> DestParameter;
}

impl<SrcType, DestType, SrcParameter: Clone, DestParameter: Clone> Transmogrify<DestType, SrcParameter, DestParameter> for SrcType
    where SrcType: ParameterToSlice<SrcParameter>,
          DestType: ParameterFromSlice<DestParameter> {
    fn transmogrify<Callback>(&self, f: Callback) -> DestType
        where Callback: FnMut(SrcParameter) -> DestParameter  {
            let Parameters:Vec<DestParameter> = self.as_slice().iter().cloned().map(f).collect();
            DestType::from_slice(&Parameters)
    }
}

which does work, but it's not as constrained as I'd like, as it allows anything -> anything conversion, so Rust demands type hints.