diff options
Diffstat (limited to 'lib/zipper.ml')
-rw-r--r-- | lib/zipper.ml | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/lib/zipper.ml b/lib/zipper.ml new file mode 100644 index 0000000..37e14de --- /dev/null +++ b/lib/zipper.ml @@ -0,0 +1,22 @@ +type zipper = + { above : string list + ; selected : string + ; below : string list + } + +let up (zipper : zipper) = + match zipper.above with + | [] -> zipper + | a :: rest -> { above = rest; selected = a; below = zipper.selected :: zipper.below } + + +let down (zipper : zipper) = + match zipper.below with + | [] -> zipper + | a :: rest -> { below = rest; selected = a; above = zipper.selected :: zipper.above } + + +let selected zipper = zipper.selected + +let to_array zipper = + List.concat [ zipper.above; [ zipper.selected ]; zipper.below ] |> Array.of_list |