use crate::traits::GenType;
pub struct Cont<'a, R, A> {
pub(crate) run_cont: Box<dyn FnOnce(Box<dyn FnOnce(A) -> R + 'a>) -> R + 'a>,
}
impl<'a, R, A> Cont<'a, R, A>
where
A: 'a,
{
pub fn new<F>(f: F) -> Self
where
F: FnOnce(Box<dyn FnOnce(A) -> R + 'a>) -> R + 'a,
{
Self {
run_cont: Box::new(f),
}
}
pub fn eval<AR>(self, f: AR) -> R
where
AR: FnOnce(A) -> R + 'a,
{
(self.run_cont)(Box::new(f))
}
}
impl<'a, R, A> GenType for Cont<'a, R, A> {
type Type<B> = Cont<'a, R, B>;
}