From e7d3a5b9f2303e1e41102ee91696fa59f686aaff Mon Sep 17 00:00:00 2001 From: Ulf Norell Date: Tue, 27 Aug 2019 11:33:43 +0200 Subject: [PATCH] Put flat_map in ListInternal.aes --- priv/stdlib/List.aes | 6 ++---- priv/stdlib/ListInternal.aes | 10 +++++----- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/priv/stdlib/List.aes b/priv/stdlib/List.aes index 3c7a643..cdd2464 100644 --- a/priv/stdlib/List.aes +++ b/priv/stdlib/List.aes @@ -102,10 +102,8 @@ namespace List = [] => reverse(acc) h::t => map_(f, t, f(h)::acc) - function flat_map(f : 'a => list('b), l : list('a)) : list('b) = flat_map_(f, l, []) - private function flat_map_(f : 'a => list('b), l : list('a), acc : list('b)) : list('b) = switch(l) - [] => reverse(acc) - h::t => flat_map_(f, t, reverse(f(h)) ++ acc) + function flat_map(f : 'a => list('b), l : list('a)) : list('b) = + ListInternal.flat_map(f, l) function filter(p : 'a => bool, l : list('a)) : list('a) = filter_(p, l, []) private function filter_(p : 'a => bool, l : list('a), acc : list('a)) : list('a) = switch(l) diff --git a/priv/stdlib/ListInternal.aes b/priv/stdlib/ListInternal.aes index b30a9ce..efd61ac 100644 --- a/priv/stdlib/ListInternal.aes +++ b/priv/stdlib/ListInternal.aes @@ -1,9 +1,9 @@ namespace ListInternal = - private function reverse_(xs : list('a), ys : list('a)) : list('a) = + // -- Flatmap ---------------------------------------------------------------- + + function flat_map(f : 'a => list('b), xs : list('a)) : list('b) = switch(xs) - [] => ys - x :: xs => reverse_(xs, x :: ys) - - function reverse(xs : list('a)) = reverse_(xs, []) + [] => [] + x :: xs => f(x) ++ flat_map(f, xs)