use std::fmt::Debug;
use std::fmt::Display;
use std::ops::Add;
use std::ops::AddAssign;
use std::ops::Div;
use std::ops::DivAssign;
use std::ops::Mul;
use std::ops::MulAssign;
use std::ops::Rem;
use std::ops::Shl;
use std::ops::ShlAssign;
use std::ops::Shr;
use std::ops::ShrAssign;
use std::ops::Sub;
use std::ops::SubAssign;
use super::Half;
use super::NumTrampolene;
use crate::num::FromRounded;
use crate::num::NumIdentity;
use crate::num::ToRounded;
pub trait Num:
Add<Self, Output = Self>
+ AddAssign
+ Sub<Self, Output = Self>
+ SubAssign
+ Mul<Self, Output = Self>
+ MulAssign
+ Div<Self, Output = Self>
+ DivAssign
+ Rem<Self, Output = Self>
+ PartialOrd
+ Display
+ Copy
+ PartialEq
+ NumTrampolene
+ Half
+ NumIdentity
+ Sized
+ Debug
+ ToRounded<f32>
+ FromRounded<f32>
{
}
impl<U> Num for U
where
U: Add<Self, Output = Self>
+ AddAssign
+ Sub<Self, Output = Self>
+ SubAssign
+ Mul<Self, Output = Self>
+ MulAssign
+ Div<Self, Output = Self>
+ DivAssign
+ Rem<Self, Output = Self>
+ PartialOrd
+ Display
+ Copy
+ PartialEq
+ NumTrampolene
+ Half
+ NumIdentity
+ Sized
+ Debug
+ ToRounded<f32>,
f32: ToRounded<Self>,
{
}
pub trait INum:
Num + Shl<Self, Output = Self> + ShlAssign + Shr<Self, Output = Self> + ShrAssign
{
}
impl<U> INum for U where
U: Num + Shl<Self, Output = Self> + ShlAssign + Shr<Self, Output = Self> + ShrAssign
{
}