use crate::{HKT4Unbound, Satisfies};
pub trait NaturalIso4<F, G>
where
F: HKT4Unbound,
G: HKT4Unbound,
{
fn to_target<A, B, C, D>(fa: F::Type<A, B, C, D>) -> G::Type<A, B, C, D>
where
A: Satisfies<F::Constraint> + Satisfies<G::Constraint>,
B: Satisfies<F::Constraint> + Satisfies<G::Constraint>,
C: Satisfies<F::Constraint> + Satisfies<G::Constraint>,
D: Satisfies<F::Constraint> + Satisfies<G::Constraint>;
fn to_source<A, B, C, D>(ga: G::Type<A, B, C, D>) -> F::Type<A, B, C, D>
where
A: Satisfies<F::Constraint> + Satisfies<G::Constraint>,
B: Satisfies<F::Constraint> + Satisfies<G::Constraint>,
C: Satisfies<F::Constraint> + Satisfies<G::Constraint>,
D: Satisfies<F::Constraint> + Satisfies<G::Constraint>;
}