From d3c55ff1bdfa15005380063a84618f57cc35f1d1 Mon Sep 17 00:00:00 2001 From: timofey Date: Mon, 31 Jul 2023 16:50:17 +0000 Subject: [PATCH] remove stackless defaults --- src/func/instances/stackless.rs | 50 ++------------------------------- 1 file changed, 3 insertions(+), 47 deletions(-) diff --git a/src/func/instances/stackless.rs b/src/func/instances/stackless.rs index 1ea8f57..1fc409e 100644 --- a/src/func/instances/stackless.rs +++ b/src/func/instances/stackless.rs @@ -11,14 +11,14 @@ use std::{cell::Cell, rc::Rc}; use crate::func::class_prelude::*; use crate::func::derivations::{ApplicativeLA2ViaSeq, ApplicativeTupleViaLA2}; +struct Wrapper<'a, F>(F, PhantomData<&'a ()>); + trait Atom { fn next<'t>(self: Box) -> Oet<'t> where Self: 't; } -struct Wrapper<'a, F>(F, PhantomData<&'a ()>); - fn atom<'a, F: 'a + FnOnce() -> Oet<'a>>(f: F) -> EvalTree<'a> { EvalTree::Atom(Box::new(Wrapper(f, PhantomData))) } @@ -157,18 +157,6 @@ impl<'a> Functor<'a> for StacklessInstance { fn fmap(fa: Self::F, f: impl 'a + FnOnce(A) -> B) -> Self::F { fa.map(f) } - - fn replace(fa: Self::F, b: B) -> Self::F { - Stackless(Box::new(|takesb| { - Some(EvalTree::Composite( - batom(move || fa.call(drop)), - batom(move || { - takesb(b); - None - }), - )) - })) - } } impl<'a> Pure<'a> for StacklessInstance { @@ -201,25 +189,7 @@ impl<'a> ApplicativeTuple<'a> for StacklessInstance { impl<'a> ApplicativeSelect<'a> for StacklessInstance {} -impl<'a> Applicative<'a> for StacklessInstance { - fn discard_first(fa: Self::F, fb: Self::F) -> Self::F { - Stackless(Box::new(|takesb| { - Some(EvalTree::Composite( - batom(|| fa.call(drop)), - batom(|| fb.0(takesb)), - )) - })) - } - - fn discard_second(fa: Self::F, fb: Self::F) -> Self::F { - Stackless(Box::new(|takesa| { - Some(EvalTree::Composite( - batom(|| fa.0(takesa)), - batom(|| fb.call(drop)), - )) - })) - } -} +impl<'a> Applicative<'a> for StacklessInstance {} impl<'a> Monad<'a> for StacklessInstance { fn bind(fa: Self::F, f: impl 'a + FnOnce(A) -> Self::F) -> Self::F { @@ -234,20 +204,6 @@ impl<'a> Monad<'a> for StacklessInstance { }) }) } - - fn join(ffa: Self::F>) -> Self::F { - Stackless(Box::new(|takesa| { - let cell_l = Rc::new(Cell::new(None)); - let cell_r = cell_l.clone(); - Some(EvalTree::Composite( - batom(move || ffa.call(move |a| set_cell(cell_l, a))), - batom(move || { - let stackless = get_cell(cell_r); - satom(|| stackless.0(takesa)) - }), - )) - })) - } } #[cfg(test)]