//@ check-pass | |
use std::ops::Mul; | |
fn main() {} | |
trait Ring {} | |
trait Real: Ring {} | |
trait Module: Sized + Mul<<Self as Module>::Ring, Output = Self> { | |
type Ring: Ring; | |
} | |
trait EuclideanSpace { | |
type Coordinates: Module<Ring = Self::Real>; | |
type Real: Real; | |
} | |
trait Translation<E: EuclideanSpace> { | |
fn to_vector(&self) -> E::Coordinates; | |
fn powf(&self, n: <E::Coordinates as Module>::Ring) -> E::Coordinates { | |
self.to_vector() * n | |
} | |
} |