aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorinoas <mail@inoas.com>2022-06-25 16:33:29 +0200
committerLouis Pilfold <louis@lpil.uk>2022-07-03 22:10:45 +0100
commitcddb0ff3ed01f0ff13d6f98085a41b1d0866f6ad (patch)
treec1a9adb5f661f0ae3a3902bcb407c9a95c92cd68 /src
parentbde95f08122dda73867c745fd866f4c74b9e105d (diff)
downloadgleam_stdlib-cddb0ff3ed01f0ff13d6f98085a41b1d0866f6ad.tar.gz
gleam_stdlib-cddb0ff3ed01f0ff13d6f98085a41b1d0866f6ad.zip
attempt at fixing missing tco
Diffstat (limited to 'src')
-rw-r--r--src/gleam/list.gleam14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/gleam/list.gleam b/src/gleam/list.gleam
index 9c554f7..8beeeb9 100644
--- a/src/gleam/list.gleam
+++ b/src/gleam/list.gleam
@@ -790,7 +790,19 @@ pub fn find_map(
pub fn all(in list: List(a), satisfying predicate: fn(a) -> Bool) -> Bool {
case list {
[] -> True
- [x, ..rest] -> predicate(x) && all(rest, predicate)
+ list -> all_tail_recursive(list, predicate, True)
+ }
+}
+
+fn all_tail_recursive(
+ list: List(a),
+ predicate: fn(a) -> Bool,
+ accumulator: Bool,
+) -> Bool {
+ case list {
+ [] -> accumulator
+ [x, ..rest] ->
+ all_tail_recursive(rest, predicate, accumulator && predicate(x))
}
}