From 4113cb1607fba047b7a143e85b86cf28981ab502 Mon Sep 17 00:00:00 2001 From: Lysxia Date: Mon, 6 Jan 2020 05:13:31 -0500 Subject: [PATCH] Fix Filter to not take exponential time --- src/Fcf/Data/List.hs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Fcf/Data/List.hs b/src/Fcf/Data/List.hs index 256a3cd..e7ca4df 100644 --- a/src/Fcf/Data/List.hs +++ b/src/Fcf/Data/List.hs @@ -100,9 +100,9 @@ type instance Eval (ConcatMap f lst) = Eval (Concat (Eval (Map f lst))) data Filter :: (a -> Exp Bool) -> [a] -> Exp [a] type instance Eval (Filter _p '[]) = '[] type instance Eval (Filter p (a ': as)) = - If (Eval (p a)) - (a ': Eval (Filter p as)) - (Eval (Filter p as)) + Eval (If (Eval (p a)) + ('(:) a <$> Filter p as) + (Filter p as)) data Head :: [a] -> Exp (Maybe a) type instance Eval (Head '[]) = 'Nothing