diff options
author | inoas <mail@inoas.com> | 2022-06-27 23:33:43 +0200 |
---|---|---|
committer | Louis Pilfold <louis@lpil.uk> | 2022-07-03 22:10:45 +0100 |
commit | 812ac3ac100a5800cfbfeab8262c41ec248376cc (patch) | |
tree | 63656f3fa94a8ac8fffde77087a9b6455289a23a /src | |
parent | 5029da854bb757f12e963e52068edaca764f0df7 (diff) | |
download | gleam_stdlib-812ac3ac100a5800cfbfeab8262c41ec248376cc.tar.gz gleam_stdlib-812ac3ac100a5800cfbfeab8262c41ec248376cc.zip |
make List.contains tco compatible
Diffstat (limited to 'src')
-rw-r--r-- | src/gleam/list.gleam | 10 |
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) } } |