diff options
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 } |
