aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorinoas <mail@inoas.com>2022-06-27 23:33:43 +0200
committerLouis Pilfold <louis@lpil.uk>2022-07-03 22:10:45 +0100
commit812ac3ac100a5800cfbfeab8262c41ec248376cc (patch)
tree63656f3fa94a8ac8fffde77087a9b6455289a23a /src
parent5029da854bb757f12e963e52068edaca764f0df7 (diff)
downloadgleam_stdlib-812ac3ac100a5800cfbfeab8262c41ec248376cc.tar.gz
gleam_stdlib-812ac3ac100a5800cfbfeab8262c41ec248376cc.zip
make List.contains tco compatible
Diffstat (limited to 'src')
-rw-r--r--src/gleam/list.gleam10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/gleam/list.gleam b/src/gleam/list.gleam
index 6977338..71f332a 100644
--- a/src/gleam/list.gleam
+++ b/src/gleam/list.gleam
@@ -167,7 +167,15 @@ pub fn is_empty(list: List(a)) -> Bool {
pub fn contains(list: List(a), any elem: a) -> Bool {
case list {
[] -> False
- [head, ..rest] -> head == elem || contains(rest, elem)
+ list -> do_contains(list, elem, False)
+ }
+}
+
+fn do_contains(list: List(a), any elem: a, accumulator: Bool) -> Bool {
+ case list {
+ _ if accumulator == True -> True
+ [] -> accumulator
+ [head, ..rest] -> do_contains(rest, elem, head == elem || accumulator)
}
}