use std::marker::PhantomData;
use crate::category::validate::check_functor_laws;
use crate::category::{Category, Functor};
pub struct Analogy<F: Functor> {
_marker: PhantomData<F>,
}
impl<F: Functor> Analogy<F> {
pub fn validate() -> Result<(), Vec<String>>
where
<F::Source as Category>::Morphism: PartialEq,
<F::Target as Category>::Morphism: PartialEq,
{
check_functor_laws::<F>().map_err(|e| vec![e])
}
pub fn translate(obj: &<F::Source as Category>::Object) -> <F::Target as Category>::Object {
F::map_object(obj)
}
pub fn translate_morphism(
m: &<F::Source as Category>::Morphism,
) -> <F::Target as Category>::Morphism {
F::map_morphism(m)
}
}