use crate::field::Field;
use crate::ring::*;
pub mod fraction_impl;
#[stability::unstable(feature = "enable")]
pub trait FractionField: Field + RingExtension {
fn as_fraction(&self, el: Self::Element) -> (El<Self::BaseRing>, El<Self::BaseRing>);
fn from_fraction(&self, num: El<Self::BaseRing>, den: El<Self::BaseRing>) -> Self::Element {
self.div(&self.from(num), &self.from(den))
}
}
#[stability::unstable(feature = "enable")]
pub trait FractionFieldStore: RingStore
where
Self::Type: FractionField,
{
delegate! { FractionField, fn as_fraction(&self, el: El<Self>) -> (El<<Self::Type as RingExtension>::BaseRing>, El<<Self::Type as RingExtension>::BaseRing>) }
delegate! { FractionField, fn from_fraction(&self, num: El<<Self::Type as RingExtension>::BaseRing>, den: El<<Self::Type as RingExtension>::BaseRing>) -> El<Self> }
}
impl<R: RingStore> FractionFieldStore for R where R::Type: FractionField {}