diff options
| author | Federico Igne <undyamon@disroot.org> | 2024-01-26 20:35:57 +0100 |
|---|---|---|
| committer | Federico Igne <undyamon@disroot.org> | 2024-01-26 20:35:57 +0100 |
| commit | 1154021614181f2b62ced31cde8b9ac761f91312 (patch) | |
| tree | 1f0cd0b52e21d0aaf7ebbd6d48d9abeb88cc356e /lib/zipper.ml | |
| parent | 477dd3d2a9f452d06912f9f56c6eee831a15aead (diff) | |
| download | sandy-1154021614181f2b62ced31cde8b9ac761f91312.tar.gz sandy-1154021614181f2b62ced31cde8b9ac761f91312.zip | |
refactor: make zippers return 'pop'ped elements
Diffstat (limited to 'lib/zipper.ml')
| -rw-r--r-- | lib/zipper.ml | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/lib/zipper.ml b/lib/zipper.ml index 413f365..5f3b37a 100644 --- a/lib/zipper.ml +++ b/lib/zipper.ml | |||
| @@ -49,7 +49,9 @@ let goto n z = | |||
| 49 | let step = if n < 0 then left else right in | 49 | let step = if n < 0 then left else right in |
| 50 | Fn.apply_n_times ~n:(abs n) step z | 50 | Fn.apply_n_times ~n:(abs n) step z |
| 51 | 51 | ||
| 52 | let pop ?(n = 1) z = { z with after = Sequence.drop_eagerly z.after n } | 52 | let pop ?(n = 1) z = |
| 53 | let a, b = Sequence.split_n z.after n in | ||
| 54 | (Sequence.of_list a, { z with after = b }) | ||
| 53 | 55 | ||
| 54 | let pop_before ?(n = 1) = | 56 | let pop_before ?(n = 1) = |
| 55 | let rec aux m z = | 57 | let rec aux m z = |
| @@ -58,7 +60,10 @@ let pop_before ?(n = 1) = | |||
| 58 | aux 0 | 60 | aux 0 |
| 59 | 61 | ||
| 60 | let pop_after ?(n = 1) z = | 62 | let pop_after ?(n = 1) z = |
| 61 | if right_length z < 2 then z else right z |> pop ~n |> left | 63 | if right_length z < 2 then (Sequence.empty, z) |
| 64 | else | ||
| 65 | let a, b = right z |> pop ~n in | ||
| 66 | (a, left b) | ||
| 62 | 67 | ||
| 63 | let push x z = { z with after = Sequence.shift_right z.after x } | 68 | let push x z = { z with after = Sequence.shift_right z.after x } |
| 64 | let push_seq s z = { z with after = Sequence.append s z.after } | 69 | let push_seq s z = { z with after = Sequence.append s z.after } |
