diff options
author | Louis Pilfold <louis@lpil.uk> | 2020-09-02 22:49:29 +0100 |
---|---|---|
committer | Louis Pilfold <louis@lpil.uk> | 2020-09-02 22:50:32 +0100 |
commit | c5845fa29b5059739b6f7a5b0c7da21e752de4fa (patch) | |
tree | 08cf40c33b1c34fb0c884e3744ccded440989213 /src | |
parent | 38197b4948e212404661468b0ebd2afacf7452ba (diff) | |
download | gleam_stdlib-c5845fa29b5059739b6f7a5b0c7da21e752de4fa.tar.gz gleam_stdlib-c5845fa29b5059739b6f7a5b0c7da21e752de4fa.zip |
list.partition
Diffstat (limited to 'src')
-rw-r--r-- | src/gleam/list.gleam | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/gleam/list.gleam b/src/gleam/list.gleam index d9296da..4ca39f4 100644 --- a/src/gleam/list.gleam +++ b/src/gleam/list.gleam @@ -1034,3 +1034,21 @@ pub fn each(list: List(a), f: fn(a) -> b) -> Nil { } } } + +pub fn partition( + list: List(a), + with categorise: fn(a) -> Bool, +) -> tuple(List(a), List(a)) { + do_partition(list, categorise, [], []) +} + +fn do_partition(list, categorise, trues, falses) { + case list { + [] -> tuple(reverse(trues), reverse(falses)) + [x, ..xs] -> + case categorise(x) { + True -> do_partition(xs, categorise, [x, ..trues], falses) + False -> do_partition(xs, categorise, trues, [x, ..falses]) + } + } +} |