lubeck 0.0.0-prealpha.5-abandoned

Functional programming framework written in cutting edge rust
Documentation
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>;
}