[{"name":"Zipper.ListElemList","comment":" A special case of [`Zipper.ListElemList.Advanced`](Zipper.ListElemList.Advanced) where all elements have the same type.\n\nIf you're working with Chars, check out [`Zipper.StringCharString`](Zipper.StringCharString)\n\n  - Special case of [`Zipper.ListElemList.Advanced`](Zipper.ListElemList.Advanced)\n  - General case of [`Zipper.StringCharString`](Zipper.StringCharString)\n\n\n# Definition\n\n@docs Zipper, Position, Lengths, Section\n\n\n# Create\n\n@docs singleton, fromTuple, fromListAndIndex, fromZipperListList, fromZipperListListList\n\n\n# To\n\n@docs toTuple, toList, toZipperListList, toZipperListListList\n\n\n# Length\n\n@docs length, lengthLeft, lengthRight, position\n\n\n# Get\n\n@docs getFirst, getLeft, getSelected, getRight, getLast\n\n\n# Set\n\n@docs setFirst, setLeft, setSelected, setRight, setLast\n\n\n# Map\n\n@docs map, indexedMap\n\n\n# Update\n\n@docs update, updateLeft, updateSelected, updateRight\n\n\n# Filter\n\n@docs filter, indexedFilter\n\n\n# Move\n\n@docs moveLeft, tryMoveLeft, moveRight, tryMoveRight, moveToFirst, moveToLast\n\n\n# Insert\n\n@docs insertFirst, insertLast, insertLeftOfSelected, insertRightOfSelected\n\n\n# Sort\n\n@docs sortKeepElem, sortKeepIndex\n\n\n# Reverse\n\n@docs reverse\n\n\n# Swap\n\n\n# Indexes\n\n@docs calcIndex, calcIndexes, indexRelativeToAbsolute\n\n","unions":[{"name":"Section","comment":" Passed to the user-provided function by `indexedMap` and similar functions to specify the current element's location relative to the selected element\n","args":[],"cases":[["Left",[]],["Selected",[]],["Right",[]]]}],"aliases":[{"name":"Lengths","comment":" ","args":[],"type":"{ left : Basics.Int, right : Basics.Int, leftSelected : Basics.Int, selectedRight : Basics.Int, total : Basics.Int }"},{"name":"Position","comment":" ","args":[],"type":"{ first : Basics.Int, last : Basics.Int, selection : Basics.Int, leftEdge : Basics.Int, rightEdge : Basics.Int, section : Zipper.ListElemList.Section }"},{"name":"Zipper","comment":" A list type that must contain at least one element\n","args":["a"],"type":"( List.List a, a, List.List a )"}],"values":[{"name":"calcIndex","comment":" ","type":"Zipper.ListElemList.Zipper a -> Basics.Int -> Maybe.Maybe Zipper.ListElemList.Position"},{"name":"calcIndexes","comment":" ","type":"Zipper.ListElemList.Zipper a -> { left : List.List Zipper.ListElemList.Position, selected : Zipper.ListElemList.Position, right : List.List Zipper.ListElemList.Position }"},{"name":"filter","comment":"\n\n    fromTuple ( [ 1, 12, 3 ], 4, [ 15, 16, 7 ] )\n        |> filter (\\n -> n < 10)\n        --> ( [ 1, 3 ], Just 4, [ 7 ] )\n\n","type":"(a -> Basics.Bool) -> Zipper.ListElemList.Zipper a -> ( List.List a, Maybe.Maybe a, List.List a )"},{"name":"fromListAndIndex","comment":"\n\n    fromListAndIndex 3 [ 1, 2, 3, 4, 5, 6, 7 ]\n        --> Just (fromTuple ( [ 1, 2, 3 ], 4, [ 5, 6, 7 ] ))\n\n    fromListAndIndex 10 [ 1, 2, 3, 4, 5, 6, 7 ]\n        --> Nothing\n\n","type":"Basics.Int -> List.List a -> Maybe.Maybe (Zipper.ListElemList.Zipper a)"},{"name":"fromTuple","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], 4, [ 5, 6, 7 ] )\n        --> ( [ 3, 2, 1 ], 4, [ 5, 6, 7 ] )\n\n","type":"( List.List a, a, List.List a ) -> Zipper.ListElemList.Zipper a"},{"name":"fromZipperListList","comment":" From [`Zipper.ListList.Zipper`](Zipper.ListList#Zipper), by providing selected element.\n\n    ( [ 2, 1 ], [ 4, 5 ] )\n        |> fromZipperListList 3\n        --> ( [ 2, 1 ], 3, [ 4, 5 ] )\n\n","type":"a -> ( List.List a, List.List a ) -> Zipper.ListElemList.Zipper a"},{"name":"fromZipperListListList","comment":" From [`Zipper.ListListList.Zipper`](Zipper.ListListList#Zipper), by providing function to convert selected list to selected element.\n\n    ( [ 2, 1 ], [ 10, 11, 12 ], [ 4, 5 ] )\n        |> fromZipperListListList List.sum\n        --> ( [ 2, 1 ], 33, [ 4, 5 ] )\n\n","type":"(List.List a -> a) -> ( List.List a, List.List a, List.List a ) -> Zipper.ListElemList.Zipper a"},{"name":"getFirst","comment":"\n\n    fromTuple ( [ 1, 2 ], 3, [ 4, 5 ] )\n        |> getFirst\n        --> 1\n\n    fromTuple ( [], 1, [] )\n        |> getFirst\n        --> 1\n\n","type":"Zipper.ListElemList.Zipper a -> a"},{"name":"getLast","comment":"\n\n    fromTuple ( [ 1, 2 ], 3, [ 4, 5 ] )\n        |> getLast\n        --> 5\n\n    fromTuple ( [], 1, [] )\n        |> getLast\n        --> 1\n\n","type":"Zipper.ListElemList.Zipper a -> a"},{"name":"getLeft","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], 4, [ 5, 6, 7 ] )\n        |> getLeft\n        --> [ 1, 2, 3 ]\n\n","type":"Zipper.ListElemList.Zipper a -> List.List a"},{"name":"getRight","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], 4, [ 5, 6, 7 ] )\n        |> getRight\n        --> [ 5, 6, 7 ]\n\n","type":"Zipper.ListElemList.Zipper a -> List.List a"},{"name":"getSelected","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], 4, [ 5, 6, 7 ] )\n        |> getSelected\n        --> 4\n\n","type":"Zipper.ListElemList.Zipper a -> a"},{"name":"indexRelativeToAbsolute","comment":"\n\n    zipper : Zipper Int\n    zipper = ( [ 0, 0, 0 ], 0, [ 0, 0, 0 ] )\n\n    indexRelativeToAbsolute zipper -4 --> -1\n\n    indexRelativeToAbsolute zipper -3 --> 0\n\n    indexRelativeToAbsolute zipper -1 --> 2\n\n    indexRelativeToAbsolute zipper 0 --> 3\n\n    indexRelativeToAbsolute zipper 1 --> 4\n\n    indexRelativeToAbsolute zipper 3 --> 6\n\n    indexRelativeToAbsolute zipper 4 --> 7\n\n","type":"Zipper.ListElemList.Zipper a -> Basics.Int -> Basics.Int"},{"name":"indexedFilter","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], 4, [ 5, 6, 7 ] )\n        |> indexedFilter (\\{ section, rightEdge } val -> section == Selected || rightEdge == 0 || val == 6)\n        --> fromTuple ( [ 3 ], 4, [ 6, 7 ] )\n\n    fromTuple ( [ 1, 2, 3 ], 4, [ 5, 6, 7 ] )\n        |> indexedFilter (\\{ leftEdge, rightEdge } val -> leftEdge == 0 || rightEdge == 0)\n        --> fromTuple ( [ 1, 3 ], 4, [ 5, 7 ] )\n\n","type":"(Zipper.ListElemList.Position -> a -> Basics.Bool) -> Zipper.ListElemList.Zipper a -> Zipper.ListElemList.Zipper a"},{"name":"indexedMap","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], 4, [ 5, 6, 7 ] )\n        |> indexedMap (\\{ leftEdge } val -> (leftEdge + 1) * 10 + val)\n        --> fromTuple ( [ 11, 22, 33 ], 14, [ 15, 26, 37 ] )\n\n","type":"(Zipper.ListElemList.Position -> a -> b) -> Zipper.ListElemList.Zipper a -> Zipper.ListElemList.Zipper b"},{"name":"insertFirst","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], 4, [ 5, 6, 7 ] )\n        |> insertFirst 0\n        --> fromTuple ( [ 0, 1, 2, 3 ], 4, [ 5, 6, 7 ] )\n\n","type":"a -> Zipper.ListElemList.Zipper a -> Zipper.ListElemList.Zipper a"},{"name":"insertLast","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], 4, [ 5, 6, 7 ] )\n        |> insertLast 0\n        --> fromTuple ( [ 1, 2, 3 ], 4, [ 5, 6, 7, 0 ] )\n\n","type":"a -> Zipper.ListElemList.Zipper a -> Zipper.ListElemList.Zipper a"},{"name":"insertLeftOfSelected","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], 4, [ 5, 6, 7 ] )\n        |> insertLeftOfSelected 0\n        --> fromTuple ( [ 1, 2, 3, 0 ], 4, [ 5, 6, 7 ] )\n\n","type":"a -> Zipper.ListElemList.Zipper a -> Zipper.ListElemList.Zipper a"},{"name":"insertRightOfSelected","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], 4, [ 5, 6, 7 ] )\n        |> insertRightOfSelected 0\n        --> fromTuple ( [ 1, 2, 3 ], 4, [ 0, 5, 6, 7 ] )\n\n","type":"a -> Zipper.ListElemList.Zipper a -> Zipper.ListElemList.Zipper a"},{"name":"length","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], 4, [ 5, 6, 7 ] )\n        |> length\n        --> 7\n\n","type":"Zipper.ListElemList.Zipper a -> Basics.Int"},{"name":"lengthLeft","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], 4, [ 5, 6, 7 ] )\n        |> lengthLeft\n        --> 3\n\n","type":"Zipper.ListElemList.Zipper a -> Basics.Int"},{"name":"lengthRight","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], 4, [ 5, 6, 7 ] )\n        |> lengthRight\n        --> 3\n\n","type":"Zipper.ListElemList.Zipper a -> Basics.Int"},{"name":"map","comment":" Map a function over all elements\n\n    ( [ 2, 1 ], 3, [ 4, 5 ] )\n        |> map ((+) 10)\n        --> ( [ 12, 11 ], 13, [ 14, 15 ] )\n\n","type":"(a -> b) -> Zipper.ListElemList.Zipper a -> Zipper.ListElemList.Zipper b"},{"name":"moveLeft","comment":" Attempt to move selection to left\n\n    ( [ 2, 1 ], 3, [ 4, 5 ] )\n        |> moveLeft\n        --> Just ( [ 1 ], 2, [ 3, 4, 5 ] )\n\n    ( [], 3, [ 4, 5 ] )\n        |> moveLeft\n        --> Nothing\n\n","type":"Zipper.ListElemList.Zipper a -> Maybe.Maybe (Zipper.ListElemList.Zipper a)"},{"name":"moveRight","comment":" Attempt to move selection to right\n\n    ( [ 2, 1 ], 3, [ 4, 5 ] )\n        |> moveRight\n        --> Just ( [ 3, 2, 1 ], 4, [ 5 ] )\n\n    ( [ 1, 2 ], 3, [] )\n        |> moveRight\n        --> Nothing\n\n","type":"Zipper.ListElemList.Zipper a -> Maybe.Maybe (Zipper.ListElemList.Zipper a)"},{"name":"moveToFirst","comment":" Set selection to first element\n\n    fromTuple ( [ 1, 2, 3 ], 4, [ 5, 6, 7 ] )\n        |> moveToFirst\n        --> fromTuple ( [], 1, [ 2, 3, 4, 5, 6, 7 ] )\n\n","type":"Zipper.ListElemList.Zipper a -> Zipper.ListElemList.Zipper a"},{"name":"moveToLast","comment":" Set selection to last element\n\n    fromTuple ( [ 1, 2, 3 ], 4, [ 5, 6, 7 ] )\n        |> moveToLast\n        --> fromTuple ( [ 1, 2, 3, 4, 5, 6 ], 7, [] )\n\n","type":"Zipper.ListElemList.Zipper a -> Zipper.ListElemList.Zipper a"},{"name":"position","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], 4, [ 5, 6, 7 ] )\n        |> position\n        --> 3\n\n","type":"Zipper.ListElemList.Zipper a -> Basics.Int"},{"name":"reverse","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], 4, [ 5, 6, 7 ] )\n        |> reverse\n        --> fromTuple ( [ 7, 6, 5 ], 4, [ 3, 2, 1 ] )\n\n","type":"Zipper.ListElemList.Zipper a -> Zipper.ListElemList.Zipper a"},{"name":"setFirst","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], 4, [ 5, 6, 7 ] )\n        |> setFirst 0\n        --> fromTuple ( [ 0, 2, 3 ], 4, [ 5, 6, 7 ] )\n\n","type":"a -> Zipper.ListElemList.Zipper a -> Zipper.ListElemList.Zipper a"},{"name":"setLast","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], 4, [ 5, 6, 7 ] )\n        |> setLast 0\n        --> fromTuple ( [ 1, 2, 3 ], 4, [ 5, 6, 0 ] )\n\n","type":"a -> Zipper.ListElemList.Zipper a -> Zipper.ListElemList.Zipper a"},{"name":"setLeft","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], 4, [ 5, 6, 7 ] )\n        |> setLeft [ 11, 12, 13 ]\n        --> fromTuple ( [ 11, 12, 13 ], 4, [ 5, 6, 7 ] )\n\n","type":"List.List a -> Zipper.ListElemList.Zipper a -> Zipper.ListElemList.Zipper a"},{"name":"setRight","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], 4, [ 5, 6, 7 ] )\n        |> setRight [ 15, 16, 17 ]\n        --> fromTuple ( [ 1, 2, 3 ], 4, [ 15, 16, 17 ] )\n\n","type":"List.List a -> Zipper.ListElemList.Zipper a -> Zipper.ListElemList.Zipper a"},{"name":"setSelected","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], 4, [ 5, 6, 7 ] )\n        |> setSelected 0\n        --> fromTuple ( [ 1, 2, 3 ], 0, [ 5, 6, 7 ] )\n\n","type":"a -> Zipper.ListElemList.Zipper a -> Zipper.ListElemList.Zipper a"},{"name":"singleton","comment":" Create a zipper with a single element\n\n    singleton 0 --> ( [], 0, [] )\n\n","type":"a -> Zipper.ListElemList.Zipper a"},{"name":"sortKeepElem","comment":"\n\n    fromTuple ( [ 9, 7, 8, 6 ], 5, [ 5, 3, 4 ] )\n        |> sortKeepElem\n        --> fromTuple ( [ 3, 4 ], 5, [ 5, 6, 7, 8, 9 ] )\n\n    fromTuple ( [ 9, 7, 8, 6, 5 ], 5, [ 3, 4 ] )\n        |> sortKeepElem\n        --> fromTuple ( [ 3, 4, 5 ], 5, [ 6, 7, 8, 9 ] )\n\n","type":"Zipper.ListElemList.Zipper comparable -> Zipper.ListElemList.Zipper comparable"},{"name":"sortKeepIndex","comment":"\n\n    fromTuple ( [ 6, 6, 5, 4, 4 ], 2, [ 1, 1 ] )\n        |> sortKeepIndex\n        --> fromTuple ( [ 1, 1, 2, 4, 4 ], 5, [ 6, 6 ] )\n\n","type":"Zipper.ListElemList.Zipper comparable -> Zipper.ListElemList.Zipper comparable"},{"name":"toList","comment":"\n\n    ( [ 1, 2, 3 ], 4, [ 5, 6, 7 ] )\n        |> fromTuple\n        |> toList\n        --> [ 1, 2, 3, 4, 5, 6, 7 ]\n\n","type":"Zipper.ListElemList.Zipper a -> List.List a"},{"name":"toTuple","comment":"\n\n    ( [ 1, 2, 3 ], 4, [ 5, 6, 7 ] )\n        |> fromTuple\n        |> toTuple\n        --> ( [ 1, 2, 3 ], 4, [ 5, 6, 7 ] )\n\n","type":"Zipper.ListElemList.Zipper a -> ( List.List a, a, List.List a )"},{"name":"toZipperListList","comment":" To [`Zipper.ListList.Zipper`](Zipper.ListList#Zipper) by dropping selected element\n\n    ( [ 2, 1 ], 3, [ 4, 5 ] )\n        |> toZipperListList\n        --> ( [ 2, 1 ], [ 4, 5 ] )\n\n","type":"Zipper.ListElemList.Zipper a -> ( List.List a, List.List a )"},{"name":"toZipperListListList","comment":" To [`Zipper.ListListList.Zipper`](Zipper.ListListList#Zipper) by providing function to convert selected element to selected list.\n\n    ( [ 2, 1 ], 0, [ 4, 5 ] )\n        |> toZipperListListList (List.repeat 3)\n        --> ( [ 2, 1 ], [ 0, 0, 0 ], [ 4, 5 ] )\n\n","type":"(a -> List.List a) -> Zipper.ListElemList.Zipper a -> ( List.List a, List.List a, List.List a )"},{"name":"tryMoveLeft","comment":" Attempt to move selection to left, returning unmodified zipper on failure\n\n    ( [ 2, 1 ], 3, [ 4, 5 ] ) |> tryMoveLeft --> ( [ 1 ], 2, [ 3, 4, 5 ] )\n\n    ( [], 3, [ 4, 5 ] ) |> tryMoveLeft --> ( [], 3, [ 4, 5 ] )\n\n","type":"Zipper.ListElemList.Zipper a -> Zipper.ListElemList.Zipper a"},{"name":"tryMoveRight","comment":" Attempt to move selection to right, returning unmodified zipper on failure\n\n    ( [ 2, 1 ], 3, [ 4, 5 ] )\n        |> tryMoveRight\n        --> ( [ 3, 2, 1 ], 4, [ 5 ] )\n\n    ( [ 1, 2 ], 3, [] )\n        |> tryMoveRight\n        --> ( [ 1, 2 ], 3, [] )\n\n","type":"Zipper.ListElemList.Zipper a -> Zipper.ListElemList.Zipper a"},{"name":"update","comment":"\n\n    fromTuple ( [ \"a\", \"b\", \"c\" ], \"d\", [ \"e\", \"f\", \"g\" ] )\n        |> update (String.join \"-\" >> List.singleton)\n        --> fromTuple ( [ \"a-b-c\" ], \"d\", [ \"e-f-g\" ] )\n\n","type":"(List.List a -> List.List a) -> Zipper.ListElemList.Zipper a -> Zipper.ListElemList.Zipper a"},{"name":"updateLeft","comment":"\n\n    fromTuple ( [ \"a\", \"b\", \"c\" ], \"d\", [ \"e\", \"f\", \"g\" ] )\n        |> updateLeft (String.join \"-\" >> List.singleton)\n        --> fromTuple ( [ \"a-b-c\" ], \"d\", [ \"e\", \"f\", \"g\" ] )\n\n","type":"(List.List a -> List.List a) -> Zipper.ListElemList.Zipper a -> Zipper.ListElemList.Zipper a"},{"name":"updateRight","comment":"\n\n    fromTuple ( [ \"a\", \"b\", \"c\" ], \"d\", [ \"e\", \"f\", \"g\" ] )\n        |> updateRight (String.join \"-\" >> List.singleton)\n        --> fromTuple ( [ \"a\", \"b\", \"c\" ], \"d\", [ \"e-f-g\" ] )\n\n","type":"(List.List a -> List.List a) -> Zipper.ListElemList.Zipper a -> Zipper.ListElemList.Zipper a"},{"name":"updateSelected","comment":"\n\n    fromTuple ( [ \"a\", \"b\", \"c\" ], \"d\", [ \"e\", \"f\", \"g\" ] )\n        |> updateSelected (String.repeat 3)\n        --> fromTuple ( [ \"a\", \"b\", \"c\" ], \"ddd\", [ \"e\", \"f\", \"g\" ] )\n\n","type":"(a -> a) -> Zipper.ListElemList.Zipper a -> Zipper.ListElemList.Zipper a"}],"binops":[]},{"name":"Zipper.ListElemList.Advanced","comment":" A zipper with a single selected element.\n\n**Note**: If all zipper elements are of the same type, use [`Zipper.ListElemList`](Zipper.ListElemList) instead. It has a simpler API.\n\n  - General case of [`Zipper.ListElemList`](Zipper.ListElemList)\n  - General case of [`Zipper.StringCharString`](Zipper.StringCharString)\n\n\n# Definition\n\n@docs Zipper\n\n\n# Create\n\n@docs singleton, fromTuple, fromZipperListList, fromZipperListListList\n\n\n# To other types\n\n@docs toTuple, toZipperListList, toZipperListListList, toNonemptyListDropLeft, toNonemptyListDropRight\n\n\n# Utilities\n\n@docs length, lengthLeft, lengthRight, position, positionFromEnd\n\n\n# Select (rename?)\n\n@docs moveToFirst, moveToLast, moveToIndex\n\n\n# Move (rename?)\n\n@docs moveLeft, tryMoveLeft, moveLeftUntil, moveLeftN, moveLeftNNonnegative, moveRight, tryMoveRight, moveRightN, moveRightUntil, moveRightNNonnegative\n\n\n# Get\n\n@docs getLeft, getSelected, getRight, getAt, getAtClamp, getAtRelative, getAtRelativeClamp\n\n\n# Set\n\n@docs setLeft, setSelected, setRight, setAt, setAtClamp\n\n\n# Insert\n\n@docs insertAtFirst, insertAtLast, insertToLeft, insertToRight\n\n\n# Map\n\n@docs map, mapLeft, mapRight, indexedMap, indexedMapRelative\n\n\n# Filter\n\n@docs filter\n\n\n# Update\n\n@docs updateLeft, updateSelected, updateRight, updateAt, updateAtClamp\n\n","unions":[],"aliases":[{"name":"Zipper","comment":" A list type that must contain at least one element\n","args":["a","b","c"],"type":"( List.List a, b, List.List c )"}],"values":[{"name":"filter","comment":" ","type":"(a -> Basics.Bool) -> (c -> Basics.Bool) -> Zipper.ListElemList.Advanced.Zipper a b c -> Zipper.ListElemList.Advanced.Zipper a b c"},{"name":"fromTuple","comment":" ","type":"( List.List a, b, List.List c ) -> Zipper.ListElemList.Advanced.Zipper a b c"},{"name":"fromZipperListList","comment":" From [`Zipper.ListList.Zipper.Advanced`](Zipper.ListList.Advanced#Zipper), by providing selected element.\n\n    ( [ 2, 1 ], [ 4, 5 ] )\n        |> fromZipperListList 3\n        --> ( [ 2, 1 ], 3, [ 4, 5 ] )\n\n","type":"b -> ( List.List a, List.List c ) -> Zipper.ListElemList.Advanced.Zipper a b c"},{"name":"fromZipperListListList","comment":" From [`Zipper.ListListList.Zipper.Advanced`](Zipper.ListListList.Advanced#Zipper), by providing function to convert selected list to selected element.\n\n    ( [ 2, 1 ], [ 4, 5 ] )\n        |> fromZipperListList 3\n        --> ( [ 2, 1 ], 3, [ 4, 5 ] )\n\n","type":"(List.List b1 -> b2) -> ( List.List a, List.List b1, List.List c ) -> Zipper.ListElemList.Advanced.Zipper a b2 c"},{"name":"getAt","comment":" ","type":"(a -> d) -> (b -> d) -> (c -> d) -> Basics.Int -> Zipper.ListElemList.Advanced.Zipper a b c -> Maybe.Maybe d"},{"name":"getAtClamp","comment":" ","type":"(a -> d) -> (b -> d) -> (c -> d) -> Basics.Int -> Zipper.ListElemList.Advanced.Zipper a b c -> d"},{"name":"getAtRelative","comment":" ","type":"(a -> d) -> (b -> d) -> (c -> d) -> Basics.Int -> Zipper.ListElemList.Advanced.Zipper a b c -> Maybe.Maybe d"},{"name":"getAtRelativeClamp","comment":" ","type":"(a -> d) -> (b -> d) -> (c -> d) -> Basics.Int -> Zipper.ListElemList.Advanced.Zipper a b c -> d"},{"name":"getLeft","comment":" Return left elements\n\n    getLeft ( [ 2, 1 ], 3, [ 4, 5 ] )\n        --> [ 1, 2 ]\n\n","type":"Zipper.ListElemList.Advanced.Zipper a b c -> List.List a"},{"name":"getRight","comment":" Return right elements\n\n    getRight ( [ 2, 1 ], 3, [ 4, 5 ] )\n        --> [ 4, 5 ]\n\n","type":"Zipper.ListElemList.Advanced.Zipper a b c -> List.List c"},{"name":"getSelected","comment":" Return selected element\n\n    getSelected ( [ 2, 1 ], 3, [ 4, 5 ] )\n        --> 3\n\n","type":"Zipper.ListElemList.Advanced.Zipper a b c -> b"},{"name":"indexedMap","comment":" ","type":"(Zipper.ListElemList.Advanced.Position -> Basics.Int -> a1 -> a2) -> (Basics.Int -> b1 -> b2) -> (Zipper.ListElemList.Advanced.Position -> Basics.Int -> c1 -> c2) -> Zipper.ListElemList.Advanced.Zipper a1 b1 c1 -> Zipper.ListElemList.Advanced.Zipper a2 b2 c2"},{"name":"indexedMapRelative","comment":" ","type":"(Zipper.ListElemList.Advanced.Position -> Basics.Int -> a1 -> a2) -> (b1 -> b2) -> (Zipper.ListElemList.Advanced.Position -> Basics.Int -> c1 -> c2) -> Zipper.ListElemList.Advanced.Zipper a1 b1 c1 -> Zipper.ListElemList.Advanced.Zipper a2 b2 c2"},{"name":"insertAtFirst","comment":" ","type":"a -> Zipper.ListElemList.Advanced.Zipper a b c -> Zipper.ListElemList.Advanced.Zipper a b c"},{"name":"insertAtLast","comment":" ","type":"c -> Zipper.ListElemList.Advanced.Zipper a b c -> Zipper.ListElemList.Advanced.Zipper a b c"},{"name":"insertToLeft","comment":" ","type":"a -> Zipper.ListElemList.Advanced.Zipper a b c -> Zipper.ListElemList.Advanced.Zipper a b c"},{"name":"insertToRight","comment":" ","type":"c -> Zipper.ListElemList.Advanced.Zipper a b c -> Zipper.ListElemList.Advanced.Zipper a b c"},{"name":"length","comment":" ","type":"Zipper.ListElemList.Advanced.Zipper a b c -> Basics.Int"},{"name":"lengthLeft","comment":" ","type":"Zipper.ListElemList.Advanced.Zipper a b c -> Basics.Int"},{"name":"lengthRight","comment":" ","type":"Zipper.ListElemList.Advanced.Zipper a b c -> Basics.Int"},{"name":"map","comment":" Set selection to last element\n","type":"(a1 -> a2) -> (b1 -> b2) -> (c1 -> c2) -> Zipper.ListElemList.Advanced.Zipper a1 b1 c1 -> Zipper.ListElemList.Advanced.Zipper a2 b2 c2"},{"name":"mapLeft","comment":" Set selection to last element\n","type":"(a1 -> a2) -> Zipper.ListElemList.Advanced.Zipper a1 b c -> Zipper.ListElemList.Advanced.Zipper a2 b c"},{"name":"mapRight","comment":" Set selection to last element\n","type":"(c1 -> c2) -> Zipper.ListElemList.Advanced.Zipper a b c1 -> Zipper.ListElemList.Advanced.Zipper a b c2"},{"name":"moveLeft","comment":" Attempt to move selection to left\n","type":"(a -> b) -> (b -> c) -> Zipper.ListElemList.Advanced.Zipper a b c -> Maybe.Maybe (Zipper.ListElemList.Advanced.Zipper a b c)"},{"name":"moveLeftN","comment":" ","type":"(a -> b) -> (b -> c) -> (c -> b) -> (b -> a) -> Basics.Int -> Zipper.ListElemList.Advanced.Zipper a b c -> Maybe.Maybe (Zipper.ListElemList.Advanced.Zipper a b c)"},{"name":"moveLeftNNonnegative","comment":" ","type":"(a -> b) -> (b -> c) -> Basics.Int -> Zipper.ListElemList.Advanced.Zipper a b c -> Maybe.Maybe (Zipper.ListElemList.Advanced.Zipper a b c)"},{"name":"moveLeftUntil","comment":" Move left until function returns True. If no match found, returns `Nothing`.\n\n    ( [ 3, 2, 1 ], 4, [ 5, 6, 7 ] )\n        |> moveLeftUntil identity identity (\\_ n _ -> n == 2)\n        --> Just ( [ 1 ], 2, [ 3, 4, 5, 6, 7 ] )\n\n    ( [ 3, 2, 1 ], 4, [ 5, 6, 7 ] )\n        |> moveLeftUntil identity identity (\\_ n _ -> n == 1)\n        --> Just ( [], 1, [ 2, 3, 4, 5, 6, 7 ] )\n\n    ( [ 3, 2, 1 ], 4, [ 5, 6, 7 ] )\n        |> moveLeftUntil identity identity (\\_ n _ -> n == 100)\n        --> Nothing\n\n","type":"(a -> b) -> (b -> c) -> (List.List a -> b -> List.List c -> Basics.Bool) -> Zipper.ListElemList.Advanced.Zipper a b c -> Maybe.Maybe (Zipper.ListElemList.Advanced.Zipper a b c)"},{"name":"moveRight","comment":" Attempt to move selection to right\n","type":"(b -> a) -> (c -> b) -> Zipper.ListElemList.Advanced.Zipper a b c -> Maybe.Maybe (Zipper.ListElemList.Advanced.Zipper a b c)"},{"name":"moveRightN","comment":" ","type":"(a -> b) -> (b -> c) -> (c -> b) -> (b -> a) -> Basics.Int -> Zipper.ListElemList.Advanced.Zipper a b c -> Maybe.Maybe (Zipper.ListElemList.Advanced.Zipper a b c)"},{"name":"moveRightNNonnegative","comment":" ","type":"(b -> a) -> (c -> b) -> Basics.Int -> Zipper.ListElemList.Advanced.Zipper a b c -> Maybe.Maybe (Zipper.ListElemList.Advanced.Zipper a b c)"},{"name":"moveRightUntil","comment":" Move left until function returns True. If no match found, returns `Nothing`.\n\n    ( [ 3, 2, 1 ], 4, [ 5, 6, 7 ] )\n        |> moveLeftUntil identity identity (\\_ n _ -> n == 2)\n        --> Just ( [ 1 ], 2, [ 3, 4, 5, 6, 7 ] )\n\n    ( [ 3, 2, 1 ], 4, [ 5, 6, 7 ] )\n        |> moveLeftUntil identity identity (\\_ n _ -> n == 1)\n        --> Just ( [], 1, [ 2, 3, 4, 5, 6, 7 ] )\n\n    ( [ 3, 2, 1 ], 4, [ 5, 6, 7 ] )\n        |> moveLeftUntil identity identity (\\_ n _ -> n == 100)\n        --> Nothing\n\n","type":"(b -> a) -> (c -> b) -> (List.List a -> b -> List.List c -> Basics.Bool) -> Zipper.ListElemList.Advanced.Zipper a b c -> Maybe.Maybe (Zipper.ListElemList.Advanced.Zipper a b c)"},{"name":"moveToFirst","comment":" Set selection to first element\n","type":"(a -> b) -> (b -> c) -> Zipper.ListElemList.Advanced.Zipper a b c -> Zipper.ListElemList.Advanced.Zipper a b c"},{"name":"moveToIndex","comment":" Try to set selection to Nth element, returning Nothing on failure\n","type":"(a -> b) -> (b -> c) -> (c -> b) -> (b -> a) -> Basics.Int -> Zipper.ListElemList.Advanced.Zipper a b c -> Maybe.Maybe (Zipper.ListElemList.Advanced.Zipper a b c)"},{"name":"moveToLast","comment":" Set selection to last element\n","type":"(b -> a) -> (c -> b) -> Zipper.ListElemList.Advanced.Zipper a b c -> Zipper.ListElemList.Advanced.Zipper a b c"},{"name":"position","comment":" ","type":"Zipper.ListElemList.Advanced.Zipper a b c -> Basics.Int"},{"name":"positionFromEnd","comment":" ","type":"Zipper.ListElemList.Advanced.Zipper a b c -> Basics.Int"},{"name":"setAt","comment":" ","type":"Zipper.ListElemList.Advanced.Zipper a b c -> Zipper.ListElemList.Advanced.Zipper a b c"},{"name":"setAtClamp","comment":" ","type":"Zipper.ListElemList.Advanced.Zipper a b c -> Zipper.ListElemList.Advanced.Zipper a b c"},{"name":"setLeft","comment":" Replace left elements\n\n    ( [ 2, 1 ], 3, [ 4, 5 ] )\n        |> setLeft [ 'a', 'b' ]\n        --> ( [ 'b', 'a' ], 3, [ 4, 5 ] )\n\n","type":"List.List a2 -> Zipper.ListElemList.Advanced.Zipper a1 b c -> Zipper.ListElemList.Advanced.Zipper a2 b c"},{"name":"setRight","comment":" Replace right elements\n\n    ( [ 2, 1 ], 3, [ 4, 5 ] )\n        |> setRight [ 'd', 'e' ]\n        --> ( [ 2, 1 ], 3, [ 'd', 'e' ] )\n\n","type":"List.List c2 -> Zipper.ListElemList.Advanced.Zipper a b c1 -> Zipper.ListElemList.Advanced.Zipper a b c2"},{"name":"setSelected","comment":" Replace selected element\n\n    ( [ 2, 1 ], 3, [ 4, 5 ] )\n        |> setSelected 'c'\n        --> ( [ 2, 1 ], 'c', [ 4, 5 ] )\n\n","type":"b2 -> Zipper.ListElemList.Advanced.Zipper a b1 c -> Zipper.ListElemList.Advanced.Zipper a b2 c"},{"name":"singleton","comment":" Create a new `Zipper`\n\n    singleton 0 --> ( [], 0, [] )\n\n","type":"b -> Zipper.ListElemList.Advanced.Zipper a b c"},{"name":"toNonemptyListDropLeft","comment":" Convert zipper to a nonempty list by dropping all left elements. Fully compatible with [coreygirard/elm-nonempty-list](https://package.elm-lang.org/packages/coreygirard/elm-nonempty-list/latest/)\n\n    ( [ 2, 1 ], 3, [ 4, 5 ] )\n        |> toNonemptyListDropLeft\n        --> ( 3, [ 4, 5 ] )\n\n","type":"Zipper.ListElemList.Advanced.Zipper a b c -> ( b, List.List c )"},{"name":"toNonemptyListDropRight","comment":" Convert zipper to a nonempty list by dropping all left elements. Fully compatible with [coreygirard/elm-nonempty-list](https://package.elm-lang.org/packages/coreygirard/elm-nonempty-list/latest/). Note that the relative order of elements changes to fit the nonempty list type.\n\n    ( [ 2, 1 ], 3, [ 4, 5 ] )\n        |> toNonemptyListDropRight\n        --> ( 3, [ 1, 2 ] )\n\n","type":"Zipper.ListElemList.Advanced.Zipper a b c -> ( b, List.List a )"},{"name":"toTuple","comment":" ","type":"Zipper.ListElemList.Advanced.Zipper a b c -> ( List.List a, b, List.List c )"},{"name":"toZipperListList","comment":" To [`Zipper.ListList.Zipper.Advanced`](Zipper.ListList.Advanced#Zipper) by dropping selected element\n\n    ( [ 2, 1 ], 3, [ 4, 5 ] )\n        |> toZipperListList\n        --> ( [ 2, 1 ], [ 4, 5 ] )\n\n","type":"Zipper.ListElemList.Advanced.Zipper a b c -> ( List.List a, List.List c )"},{"name":"toZipperListListList","comment":" To [`Zipper.ListListList.Zipper.Advanced`](Zipper.ListListList.Advanced#Zipper) by providing function to convert selected element to selected list.\n\n    ( [ 2, 1 ], 3, [ 4, 5 ] )\n        |> toZipperListList\n        --> ( [ 2, 1 ], [ 4, 5 ] )\n\n","type":"(b1 -> List.List b2) -> Zipper.ListElemList.Advanced.Zipper a b1 c -> ( List.List a, List.List b2, List.List c )"},{"name":"tryMoveLeft","comment":" Attempt to move selection to left, returning unmodified zipper on failure\n","type":"(a -> b) -> (b -> c) -> Zipper.ListElemList.Advanced.Zipper a b c -> Zipper.ListElemList.Advanced.Zipper a b c"},{"name":"tryMoveRight","comment":" Attempt to move selection to right, returning unmodified zipper on failure\n","type":"(b -> a) -> (c -> b) -> Zipper.ListElemList.Advanced.Zipper a b c -> Zipper.ListElemList.Advanced.Zipper a b c"},{"name":"updateAt","comment":" ","type":"Zipper.ListElemList.Advanced.Zipper a b c -> Zipper.ListElemList.Advanced.Zipper a b c"},{"name":"updateAtClamp","comment":" ","type":"Zipper.ListElemList.Advanced.Zipper a b c -> Zipper.ListElemList.Advanced.Zipper a b c"},{"name":"updateLeft","comment":" Set selection to last element\n","type":"(List.List a1 -> List.List a2) -> Zipper.ListElemList.Advanced.Zipper a1 b c -> Zipper.ListElemList.Advanced.Zipper a2 b c"},{"name":"updateRight","comment":" Set selection to last element\n","type":"(List.List c1 -> List.List c2) -> Zipper.ListElemList.Advanced.Zipper a b c1 -> Zipper.ListElemList.Advanced.Zipper a b c2"},{"name":"updateSelected","comment":" Set selection to last element\n","type":"(b1 -> b2) -> Zipper.ListElemList.Advanced.Zipper a b1 c -> Zipper.ListElemList.Advanced.Zipper a b2 c"}],"binops":[]},{"name":"Zipper.ListElemList.Extra","comment":" A special case of [`Zipper.ListElemList.Advanced`](Zipper.ListElemList.Advanced) where all elements have the same type.\n\nIf you're working with Chars, check out [`Zipper.StringCharString`](Zipper.StringCharString)\n\n  - Special case of [`Zipper.ListElemList.Advanced`](Zipper.ListElemList.Advanced)\n  - General case of [`Zipper.StringCharString`](Zipper.StringCharString)\n\n\n# Length\n\n@docs positionFromEnd\n\n\n# Get\n\n@docs getAt, getAtClamp, getAtRelative, getAtRelativeClamp\n\n\n# Set\n\n@docs setAt, trySetAt, setAtClamp, setAtRelative, trySetAtRelative, setAtRelativeClamp\n\n\n# Map\n\n@docs mapSeparately, mapLeft, mapRight, indexedMapSeparately, indexedMapLeft, indexedMapSelected, indexedMapRight\n\n\n# Update\n\n@docs updateSeparately, updateAt, tryUpdateAt, updateAtClamp, updateAtRelative, tryUpdateAtRelative, updateAtRelativeClamp\n\n\n# Filter\n\n@docs filterSeparately, filterLeft, filterRight, indexedFilterLeft, indexedFilterRight\n\n\n# Move\n\n@docs moveLeftUntil, moveRightUntil, moveToIndex, moveToIndexRelative, tryMoveToIndex, tryMoveToIndexRelative\n\n\n# Insert\n\n\n# Sort\n\n@docs sortByKeepElem, sortWithKeepElem, sortByKeepIndex, sortWithKeepIndex\n\n\n# Reverse\n\n@docs reverseLeft, reverseRight\n\n\n# Swap\n\n@docs swapSelectedWithFirst, swapSelectedWithLast, swapSelectedWithIndex, trySwapSelectedWithIndex, swap\n\n\n# Indexes\n\n","unions":[],"aliases":[],"values":[{"name":"filterLeft","comment":" ","type":"(a -> Basics.Bool) -> Zipper.ListElemList.Zipper a -> Zipper.ListElemList.Zipper a"},{"name":"filterRight","comment":" ","type":"(a -> Basics.Bool) -> Zipper.ListElemList.Zipper a -> Zipper.ListElemList.Zipper a"},{"name":"filterSeparately","comment":" ","type":"(a -> Basics.Bool) -> (a -> Basics.Bool) -> (a -> Basics.Bool) -> Zipper.ListElemList.Zipper a -> ( List.List a, Maybe.Maybe a, List.List a )"},{"name":"getAt","comment":" ","type":"Basics.Int -> Zipper.ListElemList.Zipper a -> Maybe.Maybe a"},{"name":"getAtClamp","comment":" ","type":"Basics.Int -> Zipper.ListElemList.Zipper a -> a"},{"name":"getAtRelative","comment":" ","type":"Basics.Int -> Zipper.ListElemList.Zipper a -> Maybe.Maybe a"},{"name":"getAtRelativeClamp","comment":" ","type":"Basics.Int -> Zipper.ListElemList.Zipper a -> a"},{"name":"indexedFilterLeft","comment":" ","type":"(Zipper.ListElemList.Position -> a -> Basics.Bool) -> Zipper.ListElemList.Zipper a -> Zipper.ListElemList.Zipper a"},{"name":"indexedFilterRight","comment":" ","type":"(Zipper.ListElemList.Position -> a -> Basics.Bool) -> Zipper.ListElemList.Zipper a -> Zipper.ListElemList.Zipper a"},{"name":"indexedMapLeft","comment":" ","type":"(Zipper.ListElemList.Position -> a -> a) -> Zipper.ListElemList.Zipper a -> Zipper.ListElemList.Zipper a"},{"name":"indexedMapRight","comment":" ","type":"(Zipper.ListElemList.Position -> a -> a) -> Zipper.ListElemList.Zipper a -> Zipper.ListElemList.Zipper a"},{"name":"indexedMapSelected","comment":" ","type":"(Zipper.ListElemList.Position -> a -> a) -> Zipper.ListElemList.Zipper a -> Zipper.ListElemList.Zipper a"},{"name":"indexedMapSeparately","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], 4, [ 5, 6, 7 ] )\n        |> indexedMapSeparately\n            (\\{ leftEdge } val -> (leftEdge + 1) * 10 + val)\n            (\\{ leftEdge } val -> (leftEdge + 1) * 10 + val)\n            (\\{ leftEdge } val -> (leftEdge + 1) * 10 + val)\n        --> fromTuple ( [ 11, 22, 33 ], 14, [ 15, 26, 37 ] )\n\n","type":"(Zipper.ListElemList.Position -> a -> b) -> (Zipper.ListElemList.Position -> a -> b) -> (Zipper.ListElemList.Position -> a -> b) -> Zipper.ListElemList.Zipper a -> Zipper.ListElemList.Zipper b"},{"name":"mapLeft","comment":" ","type":"(a -> a) -> Zipper.ListElemList.Zipper a -> Zipper.ListElemList.Zipper a"},{"name":"mapRight","comment":" ","type":"(a -> a) -> Zipper.ListElemList.Zipper a -> Zipper.ListElemList.Zipper a"},{"name":"mapSeparately","comment":" Map a function over all elements\n\n    ( [ 2, 1 ], 3, [ 4, 5 ] )\n        |> mapSeparately ((+) 10) ((+) 20) ((+) 30)\n        --> ( [ 12, 11 ], 23, [ 34, 35 ] )\n\n","type":"(a -> b) -> (a -> b) -> (a -> b) -> Zipper.ListElemList.Zipper a -> Zipper.ListElemList.Zipper b"},{"name":"moveLeftUntil","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], 4, [ 5, 6, 7 ] )\n        |> moveLeftUntil (\\left _ _ -> List.length left <= 1)\n        --> Just (fromTuple ( [ 1 ], 2, [ 3, 4, 5, 6, 7 ] ))\n\n","type":"(List.List a -> a -> List.List a -> Basics.Bool) -> Zipper.ListElemList.Zipper a -> Maybe.Maybe (Zipper.ListElemList.Zipper a)"},{"name":"moveRightUntil","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], 4, [ 5, 6, 7 ] )\n        |> moveRightUntil (\\left _ _ -> List.length left >= 5)\n        --> Just (fromTuple ( [ 1, 2, 3, 4, 5 ], 6, [ 7 ] ))\n\n","type":"(List.List a -> a -> List.List a -> Basics.Bool) -> Zipper.ListElemList.Zipper a -> Maybe.Maybe (Zipper.ListElemList.Zipper a)"},{"name":"moveToIndex","comment":" Set selection to Nth element\n\n    fromTuple ( [ 1, 2, 3 ], 4, [ 5, 6, 7 ] )\n        |> moveToIndex 5\n        --> Just (fromTuple ( [ 1, 2, 3, 4, 5 ], 6, [ 7 ] ))\n\n    fromTuple ( [ 1, 2, 3 ], 4, [ 5, 6, 7 ] )\n        |> moveToIndex 10\n        --> Nothing\n\n","type":"Basics.Int -> Zipper.ListElemList.Zipper a -> Maybe.Maybe (Zipper.ListElemList.Zipper a)"},{"name":"moveToIndexRelative","comment":" Set selection to Nth element\n","type":"Basics.Int -> Zipper.ListElemList.Zipper a -> Maybe.Maybe (Zipper.ListElemList.Zipper a)"},{"name":"positionFromEnd","comment":" ","type":"Zipper.ListElemList.Zipper a -> Basics.Int"},{"name":"reverseLeft","comment":" ","type":"Zipper.ListElemList.Zipper a -> Zipper.ListElemList.Zipper a"},{"name":"reverseRight","comment":" ","type":"Zipper.ListElemList.Zipper a -> Zipper.ListElemList.Zipper a"},{"name":"setAt","comment":" ","type":"Basics.Int -> a -> Zipper.ListElemList.Zipper a -> Maybe.Maybe (Zipper.ListElemList.Zipper a)"},{"name":"setAtClamp","comment":" ","type":"Basics.Int -> a -> Zipper.ListElemList.Zipper a -> Zipper.ListElemList.Zipper a"},{"name":"setAtRelative","comment":" ","type":"Basics.Int -> a -> Zipper.ListElemList.Zipper a -> Maybe.Maybe (Zipper.ListElemList.Zipper a)"},{"name":"setAtRelativeClamp","comment":" ","type":"Basics.Int -> a -> Zipper.ListElemList.Zipper a -> Zipper.ListElemList.Zipper a"},{"name":"sortByKeepElem","comment":" ","type":"(a -> comparable) -> Zipper.ListElemList.Zipper a -> Zipper.ListElemList.Zipper a"},{"name":"sortByKeepIndex","comment":" ","type":"(a -> comparable) -> Zipper.ListElemList.Zipper a -> Zipper.ListElemList.Zipper a"},{"name":"sortWithKeepElem","comment":" ","type":"(a -> a -> Basics.Order) -> Zipper.ListElemList.Zipper a -> Zipper.ListElemList.Zipper a"},{"name":"sortWithKeepIndex","comment":" ","type":"(a -> a -> Basics.Order) -> Zipper.ListElemList.Zipper a -> Zipper.ListElemList.Zipper a"},{"name":"swap","comment":" ","type":"Zipper.ListElemList.Zipper a -> Zipper.ListElemList.Zipper a"},{"name":"swapSelectedWithFirst","comment":" ","type":"Zipper.ListElemList.Zipper a -> Zipper.ListElemList.Zipper a"},{"name":"swapSelectedWithIndex","comment":" ","type":"Basics.Int -> Zipper.ListElemList.Zipper a -> Maybe.Maybe (Zipper.ListElemList.Zipper a)"},{"name":"swapSelectedWithLast","comment":" ","type":"Zipper.ListElemList.Zipper a -> Zipper.ListElemList.Zipper a"},{"name":"tryMoveToIndex","comment":" Set selection to Nth element\n","type":"Basics.Int -> Zipper.ListElemList.Zipper a -> Zipper.ListElemList.Zipper a"},{"name":"tryMoveToIndexRelative","comment":" Set selection to Nth element\n","type":"Basics.Int -> Zipper.ListElemList.Zipper a -> Zipper.ListElemList.Zipper a"},{"name":"trySetAt","comment":" ","type":"Basics.Int -> a -> Zipper.ListElemList.Zipper a -> Zipper.ListElemList.Zipper a"},{"name":"trySetAtRelative","comment":" ","type":"Basics.Int -> a -> Zipper.ListElemList.Zipper a -> Zipper.ListElemList.Zipper a"},{"name":"trySwapSelectedWithIndex","comment":" ","type":"Basics.Int -> Zipper.ListElemList.Zipper a -> Zipper.ListElemList.Zipper a"},{"name":"tryUpdateAt","comment":" ","type":"Basics.Int -> (a -> a) -> Zipper.ListElemList.Zipper a -> Zipper.ListElemList.Zipper a"},{"name":"tryUpdateAtRelative","comment":" ","type":"Basics.Int -> (a -> a) -> Zipper.ListElemList.Zipper a -> Zipper.ListElemList.Zipper a"},{"name":"updateAt","comment":" ","type":"Basics.Int -> (a -> a) -> Zipper.ListElemList.Zipper a -> Maybe.Maybe (Zipper.ListElemList.Zipper a)"},{"name":"updateAtClamp","comment":" ","type":"Basics.Int -> (a -> a) -> Zipper.ListElemList.Zipper a -> Zipper.ListElemList.Zipper a"},{"name":"updateAtRelative","comment":" ","type":"Basics.Int -> (a -> a) -> Zipper.ListElemList.Zipper a -> Maybe.Maybe (Zipper.ListElemList.Zipper a)"},{"name":"updateAtRelativeClamp","comment":" ","type":"Basics.Int -> (a -> a) -> Zipper.ListElemList.Zipper a -> Zipper.ListElemList.Zipper a"},{"name":"updateSeparately","comment":" ","type":"(List.List a -> List.List b) -> (a -> b) -> (List.List a -> List.List b) -> Zipper.ListElemList.Zipper a -> Zipper.ListElemList.Zipper b"}],"binops":[]},{"name":"Zipper.ListList","comment":" A library for a template type.\n\nIf you're working with Chars, check out [`Zipper.StringString`](Zipper.StringString)\n\n  - Special case of [`Zipper.ListList.Advanced`](Zipper.ListList.Advanced)\n  - General case of [`Zipper.StringString`](Zipper.StringString)\n\n\n# Definition\n\n@docs Zipper, RelativeIndex, Section, Position\n\n\n# Create\n\n@docs empty, fromTuple, fromListAndIndex, fromZipperListElemList, fromZipperListListList\n\n\n# To\n\n@docs toTuple, toList, toZipperListElemList, toZipperListListList\n\n\n# Length\n\n@docs length, position\n\n\n# Get\n\n@docs getLeft, getRight\n\n\n# Set\n\n@docs setLeft, setRight\n\n\n# Map\n\n@docs map, indexedMap\n\n\n# Update\n\n@docs update\n\n\n# Filter\n\n@docs filter, indexedFilter\n\n\n# Move\n\n@docs moveLeft, tryMoveLeft, moveRight, tryMoveRight, moveToFirst, moveToLast\n\n\n# Insert\n\n@docs insertFirst, insertLast, insertLeftOfSplit, insertRightOfSplit\n\n\n# Sort\n\n@docs sortKeepIndex\n\n\n# Reverse\n\n@docs reverse\n\n\n# Swap\n\n\n# Indexes\n\n@docs calcIndex, calcIndexes, indexRelativeToAbsolute\n\n","unions":[{"name":"RelativeIndex","comment":" ","args":[],"cases":[["LeftIndex",["Basics.Int"]],["RightIndex",["Basics.Int"]]]},{"name":"Section","comment":" ","args":[],"cases":[["Left",[]],["Right",[]]]}],"aliases":[{"name":"Position","comment":" Passed to the user-provided function by `indexedMap` and similar functions to specify the current element's location in various reference frames\n","args":[],"type":"{ first : Basics.Int, last : Basics.Int, split : Zipper.ListList.RelativeIndex, leftEdge : Basics.Int, rightEdge : Basics.Int, section : Zipper.ListList.Section }"},{"name":"Zipper","comment":" A list type that tracks a split location\n","args":["a"],"type":"( List.List a, List.List a )"}],"values":[{"name":"calcIndex","comment":" ","type":"Zipper.ListList.Zipper a -> Basics.Int -> Maybe.Maybe Zipper.ListList.Position"},{"name":"calcIndexes","comment":" ","type":"Zipper.ListList.Zipper a -> { left : List.List Zipper.ListList.Position, right : List.List Zipper.ListList.Position }"},{"name":"empty","comment":" Create an empty zipper\n\n    empty --> ( [], [] )\n\n","type":"Zipper.ListList.Zipper a"},{"name":"filter","comment":"\n\n    fromTuple ( [ 1, 2, 3, 4 ], [ 1, 2, 3, 4 ] )\n        |> filter (\\n -> modBy 2 n == 0)\n        --> fromTuple ( [ 2, 4 ], [ 2, 4 ] )\n\n","type":"(a -> Basics.Bool) -> Zipper.ListList.Zipper a -> Zipper.ListList.Zipper a"},{"name":"fromListAndIndex","comment":" ","type":"Basics.Int -> List.List a -> Maybe.Maybe (Zipper.ListList.Zipper a)"},{"name":"fromTuple","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ] )\n        --> ( [ 3, 2, 1 ], [ 4, 5, 6 ] )\n\n","type":"( List.List a, List.List a ) -> Zipper.ListList.Zipper a"},{"name":"fromZipperListElemList","comment":"\n\n    ( [ 3, 2, 1 ], 4, [ 5, 6, 7 ] )\n        |> fromZipperListElemList\n        --> ( [ 3, 2, 1 ], [ 5, 6, 7 ] )\n\n","type":"( List.List a, a, List.List a ) -> Zipper.ListList.Zipper a"},{"name":"fromZipperListListList","comment":"\n\n    ( [ 3, 2, 1 ], [ 4, 5, 6 ], [ 7, 8, 9 ] )\n        |> fromZipperListListList\n        --> ( [ 3, 2, 1 ], [ 7, 8, 9 ] )\n\n","type":"( List.List a, List.List a, List.List a ) -> Zipper.ListList.Zipper a"},{"name":"getLeft","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5 ] )\n        |> getLeft\n        --> [ 1, 2, 3 ]\n\n","type":"Zipper.ListList.Zipper a -> List.List a"},{"name":"getRight","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5 ] )\n        |> getRight\n        --> [ 4, 5 ]\n\n","type":"Zipper.ListList.Zipper a -> List.List a"},{"name":"indexRelativeToAbsolute","comment":"\n\n    zipper : Zipper Int\n    zipper = ( [ 0, 0, 0 ], [ 0, 0, 0 ] )\n\n    indexRelativeToAbsolute zipper (LeftIndex 3) --> -1\n\n    indexRelativeToAbsolute zipper (LeftIndex 2) --> 0\n\n    indexRelativeToAbsolute zipper (LeftIndex 0) --> 2\n\n    indexRelativeToAbsolute zipper (RightIndex 0) --> 3\n\n    indexRelativeToAbsolute zipper (RightIndex 2) --> 5\n\n    indexRelativeToAbsolute zipper (RightIndex 3) --> 6\n\n","type":"Zipper.ListList.Zipper a -> Zipper.ListList.RelativeIndex -> Basics.Int"},{"name":"indexedFilter","comment":"\n\n    fromTuple ( [ 1, 0 ], [ 4, 2, 1, 7, 8 ] )\n        |> indexedFilter (\\{first} val -> val > first)\n        --> fromTuple ( [ 1 ], [ 4, 7, 8 ] )\n\n","type":"(Zipper.ListList.Position -> a -> Basics.Bool) -> Zipper.ListList.Zipper a -> Zipper.ListList.Zipper a"},{"name":"indexedMap","comment":"\n\n    fromTuple ( [ 0, 0 ], [ 0, 0, 0, 0 ] )\n        |> indexedMap (\\{first} _ -> first)\n        --> fromTuple ( [ 0, 1 ], [ 2, 3, 4, 5 ] )\n\n    fromTuple ( [ 0, 0 ], [ 0, 0, 0, 0 ] )\n        |> indexedMap (\\{last} _ -> last)\n        --> fromTuple ( [ 5, 4 ], [ 3, 2, 1, 0 ] )\n\n    fromTuple ( [ 0, 0 ], [ 0, 0, 0, 0 ] )\n        |> indexedMap (\\{leftEdge} _ -> leftEdge)\n        --> fromTuple ( [ 0, 1 ], [ 0, 1, 2, 3 ] )\n\n    fromTuple ( [ 0, 0 ], [ 0, 0, 0, 0 ] )\n        |> indexedMap (\\{rightEdge} _ -> rightEdge)\n        --> fromTuple ( [ 1, 0 ], [ 3, 2, 1, 0 ] )\n\n","type":"(Zipper.ListList.Position -> a -> b) -> Zipper.ListList.Zipper a -> Zipper.ListList.Zipper b"},{"name":"insertFirst","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ] )\n        |> insertFirst 0\n        --> fromTuple ( [ 0, 1, 2, 3 ], [ 4, 5, 6 ] )\n\n","type":"a -> Zipper.ListList.Zipper a -> Zipper.ListList.Zipper a"},{"name":"insertLast","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ] )\n        |> insertLast 0\n        --> fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6, 0 ] )\n\n","type":"a -> Zipper.ListList.Zipper a -> Zipper.ListList.Zipper a"},{"name":"insertLeftOfSplit","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ] )\n        |> insertLeftOfSplit 0\n        --> fromTuple ( [ 1, 2, 3, 0 ], [ 4, 5, 6 ] )\n\n","type":"a -> Zipper.ListList.Zipper a -> Zipper.ListList.Zipper a"},{"name":"insertRightOfSplit","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ] )\n        |> insertRightOfSplit 0\n        --> fromTuple ( [ 1, 2, 3 ], [ 0, 4, 5, 6 ] )\n\n","type":"a -> Zipper.ListList.Zipper a -> Zipper.ListList.Zipper a"},{"name":"length","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ] )\n        |> length\n        --> 6\n\n","type":"Zipper.ListList.Zipper a -> Basics.Int"},{"name":"map","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5 ] )\n        |> map String.fromInt\n        --> fromTuple ( [ \"1\", \"2\", \"3\" ], [ \"4\", \"5\" ] )\n\n","type":"(a -> b) -> Zipper.ListList.Zipper a -> Zipper.ListList.Zipper b"},{"name":"moveLeft","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ] )\n        |> moveLeft\n        --> Just (fromTuple ( [ 1, 2 ], [ 3, 4, 5, 6 ] ))\n\n    fromTuple ( [], [ 4, 5, 6 ] )\n        |> moveLeft\n        --> Nothing\n\n","type":"Zipper.ListList.Zipper a -> Maybe.Maybe (Zipper.ListList.Zipper a)"},{"name":"moveRight","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ] )\n        |> moveRight\n        --> Just (fromTuple ( [ 1, 2, 3, 4 ], [ 5, 6 ] ))\n\n    fromTuple ( [ 1, 2, 3 ], [] )\n        |> moveRight\n        --> Nothing\n\n","type":"Zipper.ListList.Zipper a -> Maybe.Maybe (Zipper.ListList.Zipper a)"},{"name":"moveToFirst","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ] )\n        |> moveToFirst\n        --> fromTuple ( [], [ 1, 2, 3, 4, 5, 6 ] )\n\n","type":"Zipper.ListList.Zipper a -> Zipper.ListList.Zipper a"},{"name":"moveToLast","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ] )\n        |> moveToLast\n        --> fromTuple ( [ 1, 2, 3, 4, 5, 6 ], [] )\n\n","type":"Zipper.ListList.Zipper a -> Zipper.ListList.Zipper a"},{"name":"position","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5 ] )\n        |> position\n        --> 3\n\n","type":"Zipper.ListList.Zipper a -> Basics.Int"},{"name":"reverse","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ] )\n        |> reverse\n        --> fromTuple ( [ 6, 5, 4 ], [ 3, 2, 1 ] )\n\n","type":"Zipper.ListList.Zipper a -> Zipper.ListList.Zipper a"},{"name":"setLeft","comment":"\n\n    fromTuple ( [ '1', '2', '3' ], [ '4', '5', '6' ] )\n        |> setLeft [ 'a', 'b', 'c' ]\n        --> fromTuple ( [ 'a', 'b', 'c' ], [ '4', '5', '6' ] )\n\n","type":"List.List a -> Zipper.ListList.Zipper a -> Zipper.ListList.Zipper a"},{"name":"setRight","comment":"\n\n    fromTuple ( [ '1', '2', '3' ], [ '4', '5', '6' ] )\n        |> setRight [ 'a', 'b', 'c' ]\n        --> fromTuple ( [ '1', '2', '3' ], [ 'a', 'b', 'c' ] )\n\n","type":"List.List a -> Zipper.ListList.Zipper a -> Zipper.ListList.Zipper a"},{"name":"sortKeepIndex","comment":"\n\n    fromTuple ( [ 1, 4, 2 ], [ 2, 3 ] )\n        |> sortKeepIndex\n        --> fromTuple ( [ 1, 2, 2 ], [ 3, 4 ] )\n\n","type":"Zipper.ListList.Zipper comparable -> Zipper.ListList.Zipper comparable"},{"name":"toList","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ] )\n        |> toList\n        --> [ 1, 2, 3, 4, 5, 6 ]\n\n","type":"Zipper.ListList.Zipper a -> List.List a"},{"name":"toTuple","comment":"\n\n    ( [ 1, 2, 3 ], [ 4, 5, 6 ] )\n        |> fromTuple\n        |> toTuple\n        --> ( [ 1, 2, 3 ], [ 4, 5, 6 ] )\n\n","type":"Zipper.ListList.Zipper a -> ( List.List a, List.List a )"},{"name":"toZipperListElemList","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 5, 6, 7 ] )\n        |> toZipperListElemList 4\n        --> ( [ 3, 2, 1 ], 4, [ 5, 6, 7 ] )\n\n","type":"a -> Zipper.ListList.Zipper a -> ( List.List a, a, List.List a )"},{"name":"toZipperListListList","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 7, 8, 9 ] )\n        |> toZipperListListList [ 4, 5, 6 ]\n        --> ( [ 3, 2, 1 ], [ 4, 5, 6 ], [ 7, 8, 9 ] )\n\n","type":"List.List a -> Zipper.ListList.Zipper a -> ( List.List a, List.List a, List.List a )"},{"name":"tryMoveLeft","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ] )\n        |> tryMoveLeft\n        --> fromTuple ( [ 1, 2 ], [ 3, 4, 5, 6 ] )\n\n    fromTuple ( [], [ 4, 5, 6 ] )\n        |> tryMoveLeft\n        --> fromTuple ( [], [ 4, 5, 6 ] )\n\n","type":"Zipper.ListList.Zipper a -> Zipper.ListList.Zipper a"},{"name":"tryMoveRight","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ] )\n        |> tryMoveRight\n        --> fromTuple ( [ 1, 2, 3, 4 ], [ 5, 6 ] )\n\n    fromTuple ( [ 1, 2, 3 ], [] )\n        |> tryMoveRight\n        --> fromTuple ( [ 1, 2, 3 ], [] )\n\n","type":"Zipper.ListList.Zipper a -> Zipper.ListList.Zipper a"},{"name":"update","comment":"\n\n    fromTuple ( [ \"a\", \"b\", \"c\" ], [ \"d\", \"e\", \"f\" ] )\n        |> update (String.join \"\" >> List.repeat 2 >> List.indexedMap Tuple.pair)\n        --> fromTuple ( [ ( 0, \"abc\" ), ( 1, \"abc\" ) ], [ ( 0, \"def\" ), ( 1, \"def\" ) ] )\n\n","type":"(List.List a -> List.List b) -> Zipper.ListList.Zipper a -> Zipper.ListList.Zipper b"}],"binops":[]},{"name":"Zipper.ListList.Advanced","comment":" A library for a template type.\n\n**Note**: If all zipper elements are of the same type, use [`Zipper.ListList`](Zipper.ListList) instead. It has a simpler API.\n\n  - General case of [`Zipper.ListList`](Zipper.ListList)\n  - General case of [`Zipper.StringString`](Zipper.StringString)\n\n\n# Definition\n\n@docs Zipper\n\n\n# Create\n\n@docs empty\n\n\n# Utilities\n\n@docs reverse, length, lengthLeft, lengthRight, position\n\n\n# Get\n\n@docs getLeft, getRight\n\n\n# Set\n\n@docs setLeft, setRight\n\n\n# Insert\n\n@docs insertAtFirst, insertAtLast, insertToLeft, insertToRight\n\n\n# Update\n\n@docs updateLeft, updateRight\n\n\n# Move\n\n@docs moveToRight, moveToLeft, moveLeftUntil, tryMoveToRight, tryMoveToLeft, moveRightUntil, moveToN\n\n\n# Map\n\n@docs map, mapLeft, mapRight\n\n","unions":[],"aliases":[{"name":"Zipper","comment":" A list type that must contain at least one element\n","args":["a","b"],"type":"( List.List a, List.List b )"}],"values":[{"name":"empty","comment":" Create a new `Zipper`\n","type":"Zipper.ListList.Advanced.Zipper a b"},{"name":"getLeft","comment":" ","type":"Zipper.ListList.Advanced.Zipper a b -> List.List a"},{"name":"getRight","comment":" ","type":"Zipper.ListList.Advanced.Zipper a b -> List.List b"},{"name":"insertAtFirst","comment":" ","type":"a -> Zipper.ListList.Advanced.Zipper a b -> Zipper.ListList.Advanced.Zipper a b"},{"name":"insertAtLast","comment":" ","type":"b -> Zipper.ListList.Advanced.Zipper a b -> Zipper.ListList.Advanced.Zipper a b"},{"name":"insertToLeft","comment":" ","type":"a -> Zipper.ListList.Advanced.Zipper a b -> Zipper.ListList.Advanced.Zipper a b"},{"name":"insertToRight","comment":" ","type":"b -> Zipper.ListList.Advanced.Zipper a b -> Zipper.ListList.Advanced.Zipper a b"},{"name":"length","comment":" ","type":"Zipper.ListList.Advanced.Zipper a b -> Basics.Int"},{"name":"lengthLeft","comment":" ","type":"Zipper.ListList.Advanced.Zipper a b -> Basics.Int"},{"name":"lengthRight","comment":" ","type":"Zipper.ListList.Advanced.Zipper a b -> Basics.Int"},{"name":"map","comment":" ","type":"(a1 -> a2) -> (b1 -> b2) -> Zipper.ListList.Advanced.Zipper a1 b1 -> Zipper.ListList.Advanced.Zipper a2 b2"},{"name":"mapLeft","comment":" ","type":"(a -> a) -> Zipper.ListList.Advanced.Zipper a b -> Zipper.ListList.Advanced.Zipper a b"},{"name":"mapRight","comment":" ","type":"(b -> b) -> Zipper.ListList.Advanced.Zipper a b -> Zipper.ListList.Advanced.Zipper a b"},{"name":"moveLeftUntil","comment":" ","type":"(a -> b) -> (List.List a -> List.List b -> Basics.Bool) -> Zipper.ListList.Advanced.Zipper a b -> Maybe.Maybe (Zipper.ListList.Advanced.Zipper a b)"},{"name":"moveRightUntil","comment":" ","type":"(b -> a) -> (List.List a -> List.List b -> Basics.Bool) -> Zipper.ListList.Advanced.Zipper a b -> Maybe.Maybe (Zipper.ListList.Advanced.Zipper a b)"},{"name":"moveToLeft","comment":" Attempt to move split to left\n","type":"(a -> b) -> Zipper.ListList.Advanced.Zipper a b -> Maybe.Maybe (Zipper.ListList.Advanced.Zipper a b)"},{"name":"moveToN","comment":" Attempt to move the split by specifying the length of the resulting left list. If the split would be invalid, eg `n < 0` or `n > length zipper`, returns `Nothing`.\n\n    ( [ 2, 1 ], [ 3, 4 ] )\n        |> moveToN identity identity -1\n        == Nothing\n\n    ( [ 2, 1 ], [ 3, 4 ] )\n        |> moveToN identity identity 1\n        == Just ( [ 1 ], [ 2, 3, 4 ] )\n\n    ( [ 2, 1 ], [ 3, 4 ] )\n        |> moveToN identity identity 4\n        == Just ( [ 4, 3, 2, 1 ], [] )\n\n","type":"(a -> b) -> (b -> a) -> Basics.Int -> Zipper.ListList.Advanced.Zipper a b -> Maybe.Maybe (Zipper.ListList.Advanced.Zipper a b)"},{"name":"moveToRight","comment":" Attempt to move split to right\n","type":"(b -> a) -> Zipper.ListList.Advanced.Zipper a b -> Maybe.Maybe (Zipper.ListList.Advanced.Zipper a b)"},{"name":"position","comment":" ","type":"Zipper.ListList.Advanced.Zipper a b -> Basics.Int"},{"name":"reverse","comment":" ","type":"Zipper.ListList.Advanced.Zipper a b -> Zipper.ListList.Advanced.Zipper b a"},{"name":"setLeft","comment":" ","type":"List.List a -> Zipper.ListList.Advanced.Zipper a b -> Zipper.ListList.Advanced.Zipper a b"},{"name":"setRight","comment":" ","type":"List.List b -> Zipper.ListList.Advanced.Zipper a b -> Zipper.ListList.Advanced.Zipper a b"},{"name":"tryMoveToLeft","comment":" Attempt to move split to left, return unchanged zipper on failure\n","type":"(a -> b) -> Zipper.ListList.Advanced.Zipper a b -> Zipper.ListList.Advanced.Zipper a b"},{"name":"tryMoveToRight","comment":" Attempt to move split to right, return unchanged zipper on failure\n","type":"(b -> a) -> Zipper.ListList.Advanced.Zipper a b -> Zipper.ListList.Advanced.Zipper a b"},{"name":"updateLeft","comment":" ","type":"(List.List a -> List.List a) -> Zipper.ListList.Advanced.Zipper a b -> Zipper.ListList.Advanced.Zipper a b"},{"name":"updateRight","comment":" ","type":"(List.List b -> List.List b) -> Zipper.ListList.Advanced.Zipper a b -> Zipper.ListList.Advanced.Zipper a b"}],"binops":[]},{"name":"Zipper.ListList.Extra","comment":" A library for a template type.\n\nIf you're working with Chars, check out [`Zipper.StringString`](Zipper.StringString)\n\n  - Special case of [`Zipper.ListList.Advanced`](Zipper.ListList.Advanced)\n  - General case of [`Zipper.StringString`](Zipper.StringString)\n\n\n# Definition\n\n\n# Create\n\n\n# To\n\n\n# Length\n\n@docs lengthLeft, lengthRight, positionFromEnd\n\n\n# Get\n\n@docs getAt, getAtRelative\n\n\n# Set\n\n@docs setAt, trySetAt, setAtRelative, trySetAtRelative\n\n\n# Map\n\n@docs mapSeparately, mapLeft, mapRight, indexedMapSeparately, indexedMapLeft, indexedMapRight\n\n\n# Update\n\n@docs updateSeparately, updateLeft, updateRight, updateAt, tryUpdateAt, updateAtRelative, tryUpdateAtRelative\n\n\n# Filter\n\n@docs filterSeparately, filterLeft, filterRight, indexedFilterLeft, indexedFilterRight\n\n\n# Move\n\n@docs moveLeftUntil, moveRightUntil, moveToN, tryMoveToN\n\n\n# Insert\n\n\n# Sort\n\n@docs sortByKeepIndex, sortWithKeepIndex\n\n\n# Reverse\n\n@docs reverseLeft, reverseRight\n\n\n# Swap\n\n@docs swap, trySwap\n\n\n# Indexes\n\n","unions":[],"aliases":[],"values":[{"name":"filterLeft","comment":" ","type":"(a -> Basics.Bool) -> Zipper.ListList.Zipper a -> Zipper.ListList.Zipper a"},{"name":"filterRight","comment":" ","type":"(a -> Basics.Bool) -> Zipper.ListList.Zipper a -> Zipper.ListList.Zipper a"},{"name":"filterSeparately","comment":"\n\n    fromTuple ( [ 1, 2, 3, 4 ], [ 1, 2, 3, 4 ] )\n        |> filterSeparately (\\n -> modBy 2 n /= 0) (\\n -> modBy 2 n == 0)\n        --> fromTuple ( [ 1, 3 ], [ 2, 4 ] )\n\n","type":"(a -> Basics.Bool) -> (a -> Basics.Bool) -> Zipper.ListList.Zipper a -> Zipper.ListList.Zipper a"},{"name":"getAt","comment":"\n\n    zipper : Zipper Int\n    zipper = fromTuple ( [ 1, 2, 3 ], [ 4, 5 ] )\n\n    zipper |> getAt -1 --> Nothing\n\n    zipper |> getAt 0 --> Just 1\n\n    zipper |> getAt 2 --> Just 3\n\n    zipper |> getAt 3 --> Just 4\n\n    zipper |> getAt 4 --> Just 5\n\n    zipper |> getAt 5 --> Nothing\n\n","type":"Basics.Int -> Zipper.ListList.Zipper a -> Maybe.Maybe a"},{"name":"getAtRelative","comment":"\n\n    zipper : Zipper Int\n    zipper = fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ] )\n\n    zipper |> getAtRelative (LeftIndex 3) --> Nothing\n\n    zipper |> getAtRelative (LeftIndex 2) --> Just 1\n\n    zipper |> getAtRelative (LeftIndex 0) --> Just 3\n\n    zipper |> getAtRelative (RightIndex 0) --> Just 4\n\n    zipper |> getAtRelative (RightIndex 2) --> Just 6\n\n    zipper |> getAtRelative (RightIndex 3) --> Nothing\n\n","type":"Zipper.ListList.RelativeIndex -> Zipper.ListList.Zipper a -> Maybe.Maybe a"},{"name":"indexedFilterLeft","comment":" ","type":"(Zipper.ListList.Position -> a -> Basics.Bool) -> Zipper.ListList.Zipper a -> Zipper.ListList.Zipper a"},{"name":"indexedFilterRight","comment":" ","type":"(Zipper.ListList.Position -> a -> Basics.Bool) -> Zipper.ListList.Zipper a -> Zipper.ListList.Zipper a"},{"name":"indexedMapLeft","comment":" Similar to `indexedMap` except only applied to the left side. Note the slightly different type signature. See [`Zipper.ListList.Advanced.indexedMapLeft`](Zipper.ListList.Advanced.indexedMapLeft) for a function that is capable of `(List a, List a) -> (List b, List a)`\n","type":"(Zipper.ListList.Position -> a -> a) -> Zipper.ListList.Zipper a -> Zipper.ListList.Zipper a"},{"name":"indexedMapRight","comment":" Similar to `indexedMap` except only applied to the right side. Note the slightly different type signature. See [`Zipper.ListList.Advanced.indexedMapRight`](Zipper.ListList.Advanced.indexedMapRight) for a function that is capable of `(List a, List a) -> (List a, List b)`\n","type":"(Zipper.ListList.Position -> a -> a) -> Zipper.ListList.Zipper a -> Zipper.ListList.Zipper a"},{"name":"indexedMapSeparately","comment":"\n\n    fromTuple ( [ 0, 0 ], [ 0, 0, 0, 0 ] )\n        |> indexedMap (\\{first} _ -> first)\n        --> fromTuple ( [ 0, 1 ], [ 2, 3, 4, 5 ] )\n\n    fromTuple ( [ 0, 0 ], [ 0, 0, 0, 0 ] )\n        |> indexedMap (\\{last} _ -> last)\n        --> fromTuple ( [ 5, 4 ], [ 3, 2, 1, 0 ] )\n\n    fromTuple ( [ 0, 0 ], [ 0, 0, 0, 0 ] )\n        |> indexedMap (\\{leftEdge} _ -> leftEdge)\n        --> fromTuple ( [ 0, 1 ], [ 0, 1, 2, 3 ] )\n\n    fromTuple ( [ 0, 0 ], [ 0, 0, 0, 0 ] )\n        |> indexedMap (\\{rightEdge} _ -> rightEdge)\n        --> fromTuple ( [ 1, 0 ], [ 3, 2, 1, 0 ] )\n\n","type":"(Zipper.ListList.Position -> a -> b) -> (Zipper.ListList.Position -> a -> b) -> Zipper.ListList.Zipper a -> Zipper.ListList.Zipper b"},{"name":"lengthLeft","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5 ] )\n        |> lengthLeft\n        --> 3\n\n","type":"Zipper.ListList.Zipper a -> Basics.Int"},{"name":"lengthRight","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5 ] )\n        |> lengthRight\n        --> 2\n\n","type":"Zipper.ListList.Zipper a -> Basics.Int"},{"name":"mapLeft","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5 ] )\n        |> mapLeft ((+) 10)\n        --> fromTuple ( [ 11, 12, 13 ], [ 4, 5 ] )\n\n","type":"(a -> a) -> Zipper.ListList.Zipper a -> Zipper.ListList.Zipper a"},{"name":"mapRight","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5 ] )\n        |> mapRight ((+) 10)\n        --> fromTuple ( [ 1, 2, 3 ], [ 14, 15 ] )\n\n","type":"(a -> a) -> Zipper.ListList.Zipper a -> Zipper.ListList.Zipper a"},{"name":"mapSeparately","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5 ] )\n        |> mapSeparately ((+) 10) ((+) 20)\n        --> fromTuple ( [ 11, 12, 13 ], [ 24, 25 ] )\n\n","type":"(a -> b) -> (a -> b) -> Zipper.ListList.Zipper a -> Zipper.ListList.Zipper b"},{"name":"moveLeftUntil","comment":" ","type":"(List.List a -> List.List a -> Basics.Bool) -> Zipper.ListList.Zipper a -> Maybe.Maybe (Zipper.ListList.Zipper a)"},{"name":"moveRightUntil","comment":" ","type":"(List.List a -> List.List a -> Basics.Bool) -> Zipper.ListList.Zipper a -> Maybe.Maybe (Zipper.ListList.Zipper a)"},{"name":"moveToN","comment":" Set selection to Nth element\n","type":"Basics.Int -> Zipper.ListList.Zipper a -> Maybe.Maybe (Zipper.ListList.Zipper a)"},{"name":"positionFromEnd","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5 ] )\n        |> positionFromEnd\n        --> 2\n\n","type":"Zipper.ListList.Zipper a -> Basics.Int"},{"name":"reverseLeft","comment":" ","type":"Zipper.ListList.Zipper a -> Zipper.ListList.Zipper a"},{"name":"reverseRight","comment":" ","type":"Zipper.ListList.Zipper a -> Zipper.ListList.Zipper a"},{"name":"setAt","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5 ] )\n        |> setAt 2 0\n        --> Just (fromTuple ( [ 1, 2, 0 ], [ 4, 5 ] ))\n\n","type":"Basics.Int -> a -> Zipper.ListList.Zipper a -> Maybe.Maybe (Zipper.ListList.Zipper a)"},{"name":"setAtRelative","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5 ] )\n        |> setAtRelative (LeftIndex 1) 0\n        --> Just (fromTuple ( [ 1, 0, 3 ], [ 4, 5 ] ))\n\n","type":"Zipper.ListList.RelativeIndex -> a -> Zipper.ListList.Zipper a -> Maybe.Maybe (Zipper.ListList.Zipper a)"},{"name":"sortByKeepIndex","comment":" ","type":"(a -> comparable) -> Zipper.ListList.Zipper a -> Zipper.ListList.Zipper a"},{"name":"sortWithKeepIndex","comment":" ","type":"(a -> a -> Basics.Order) -> Zipper.ListList.Zipper a -> Zipper.ListList.Zipper a"},{"name":"swap","comment":" ","type":"Basics.Int -> Basics.Int -> Zipper.ListList.Zipper a -> Maybe.Maybe (Zipper.ListList.Zipper a)"},{"name":"tryMoveToN","comment":" Set selection to Nth element\n","type":"Basics.Int -> Zipper.ListList.Zipper a -> Zipper.ListList.Zipper a"},{"name":"trySetAt","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5 ] )\n        |> setAt 2 0\n        --> Just (fromTuple ( [ 1, 2, 0 ], [ 4, 5 ] ))\n\n","type":"Basics.Int -> a -> Zipper.ListList.Zipper a -> Zipper.ListList.Zipper a"},{"name":"trySetAtRelative","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5 ] )\n        |> setAtRelative (LeftIndex 1) 0\n        --> Just (fromTuple ( [ 1, 0, 3 ], [ 4, 5 ] ))\n\n","type":"Zipper.ListList.RelativeIndex -> a -> Zipper.ListList.Zipper a -> Zipper.ListList.Zipper a"},{"name":"trySwap","comment":" ","type":"Basics.Int -> Basics.Int -> Zipper.ListList.Zipper a -> Zipper.ListList.Zipper a"},{"name":"tryUpdateAt","comment":" ","type":"Basics.Int -> (a -> a) -> Zipper.ListList.Zipper a -> Zipper.ListList.Zipper a"},{"name":"tryUpdateAtRelative","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ] )\n        |> tryUpdateAtRelative (LeftIndex 0) ((+) 10)\n        --> fromTuple ( [ 1, 2, 13 ], [ 4, 5, 6 ] )\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ] )\n        |> tryUpdateAtRelative (RightIndex 10) ((+) 10)\n        --> fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ] )\n\n","type":"Zipper.ListList.RelativeIndex -> (a -> a) -> Zipper.ListList.Zipper a -> Zipper.ListList.Zipper a"},{"name":"updateAt","comment":" ","type":"Basics.Int -> (a -> a) -> Zipper.ListList.Zipper a -> Maybe.Maybe (Zipper.ListList.Zipper a)"},{"name":"updateAtRelative","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ] )\n        |> updateAtRelative (LeftIndex 0) ((+) 10)\n        --> Just (fromTuple ( [ 1, 2, 13 ], [ 4, 5, 6 ] ))\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ] )\n        |> updateAtRelative (RightIndex 2) ((+) 10)\n        --> Just (fromTuple ( [ 1, 2, 3 ], [ 4, 5, 16 ] ))\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ] )\n        |> updateAtRelative (RightIndex 10) ((+) 10)\n        --> Nothing\n\n","type":"Zipper.ListList.RelativeIndex -> (a -> a) -> Zipper.ListList.Zipper a -> Maybe.Maybe (Zipper.ListList.Zipper a)"},{"name":"updateLeft","comment":"\n\n    fromTuple ( [ \"a\", \"b\", \"c\" ], [ \"d\", \"e\", \"f\" ] )\n        |> updateLeft (String.join \"\" >> List.singleton)\n        --> fromTuple ( [ \"abc\" ], [ \"d\", \"e\", \"f\" ] )\n\n","type":"(List.List a -> List.List a) -> Zipper.ListList.Zipper a -> Zipper.ListList.Zipper a"},{"name":"updateRight","comment":"\n\n    fromTuple ( [ \"a\", \"b\", \"c\" ], [ \"d\", \"e\", \"f\" ] )\n        |> updateRight (String.join \"\" >> List.singleton)\n        --> fromTuple ( [ \"a\", \"b\", \"c\" ], [ \"def\" ] )\n\n","type":"(List.List a -> List.List a) -> Zipper.ListList.Zipper a -> Zipper.ListList.Zipper a"},{"name":"updateSeparately","comment":"\n\n    fromTuple ( [ \"a\", \"b\", \"c\" ], [ \"d\", \"e\", \"f\" ] )\n        |> updateSeparately\n            (String.join \"\" >> List.singleton)\n            (String.join \"-\" >> List.singleton)\n        --> fromTuple ( [ \"abc\" ], [ \"d-e-f\" ] )\n\n","type":"(List.List a -> List.List b) -> (List.List a -> List.List b) -> Zipper.ListList.Zipper a -> Zipper.ListList.Zipper b"}],"binops":[]},{"name":"Zipper.ListListList","comment":" A special case of `Zipper3.SelectList.Zipper` where all elements have the same type.\n\nIf you're working with Chars, check out [`Zipper.StringStringString`](Zipper.StringStringString)\n\n  - Special case of [`Zipper.ListListList.Advanced`](Zipper.ListListList.Advanced)\n  - General case of [`Zipper.StringString`](Zipper.StringString)\n\n\n# Definition\n\n@docs Zipper, RelativeIndex, Position, Section, MoveDirection\n\n\n# Create\n\n@docs empty, fromTuple, fromZipperListList, fromZipperListElemList\n\n\n# To\n\n@docs toTuple, toList, toZipperListList, toZipperListElemList\n\n\n# Length\n\n@docs length, positionLeft, positionRight\n\n\n# Get\n\n@docs getLeft, getSelected, getRight\n\n\n# Set\n\n@docs setLeft, setSelected, setRight\n\n\n# Map\n\n@docs map, indexedMap\n\n\n# Update\n\n@docs update, updateLeft, updateSelected, updateRight\n\n\n# Filter\n\n@docs filter, indexedFilter\n\n\n# Move\n\n@docs move, tryMove\n\n\n# Insert\n\n@docs insertFirst, insertLast, insertLeftOfLeftSplit, insertRightOfLeftSplit, insertLeftOfRightSplit, insertRightOfRightSplit\n\n\n# Reverse\n\n@docs reverse\n\n\n# Swap\n\n\n# Sort\n\n@docs sortKeepIndexes\n\n\n# Indexes\n\n@docs calcIndexes, calcIndex, calcIndexLeft, calcIndexSelected, calcIndexRight, indexRelativeLeftToAbsolute, indexRelativeRightToAbsolute\n\n","unions":[{"name":"MoveDirection","comment":" ","args":[],"cases":[["MoveFirst",[]],["MoveLeft",[]],["MoveNone",[]],["MoveRight",[]],["MoveLast",[]]]},{"name":"RelativeIndex","comment":" ","args":[],"cases":[["LeftIndex",["Basics.Int"]],["RightIndex",["Basics.Int"]]]},{"name":"Section","comment":" Passed to the user-provided function by `indexedMap` and similar functions to specify the current element's location relative to the selected element\n","args":[],"cases":[["Left",[]],["Selected",[]],["Right",[]]]}],"aliases":[{"name":"Position","comment":" ","args":[],"type":"{ first : Basics.Int, last : Basics.Int, leftSplit : Zipper.ListListList.RelativeIndex, rightSplit : Zipper.ListListList.RelativeIndex, leftEdge : Basics.Int, rightEdge : Basics.Int, section : Zipper.ListListList.Section }"},{"name":"Zipper","comment":" A list type that tracks two split locations\n","args":["a"],"type":"( List.List a, List.List a, List.List a )"}],"values":[{"name":"calcIndex","comment":" ","type":"Zipper.ListListList.Zipper a -> Basics.Int -> Maybe.Maybe Zipper.ListListList.Position"},{"name":"calcIndexLeft","comment":" ","type":"Zipper.ListListList.Lengths -> Basics.Int -> Zipper.ListListList.Position"},{"name":"calcIndexRight","comment":" ","type":"Zipper.ListListList.Lengths -> Basics.Int -> Zipper.ListListList.Position"},{"name":"calcIndexSelected","comment":" ","type":"Zipper.ListListList.Lengths -> Basics.Int -> Zipper.ListListList.Position"},{"name":"calcIndexes","comment":" ","type":"Zipper.ListListList.Zipper a -> { left : List.List Zipper.ListListList.Position, selected : List.List Zipper.ListListList.Position, right : List.List Zipper.ListListList.Position }"},{"name":"empty","comment":" Create an empty zipper\n\n    empty --> ( [], [], [] )\n\n","type":"Zipper.ListListList.Zipper a"},{"name":"filter","comment":"\n\n    fromTuple ( [ 1, 2, 3, 4 ], [ 5, 6, 7, 8 ], [ 9, 10, 11, 12 ] )\n        |> filter (modBy 2 >> (==) 0)\n        --> fromTuple ( [ 2, 4 ], [ 6, 8 ], [ 10, 12 ] )\n\n","type":"(a -> Basics.Bool) -> Zipper.ListListList.Zipper a -> Zipper.ListListList.Zipper a"},{"name":"fromTuple","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] )\n        --> ( [ 3, 2, 1 ], [ 4, 5, 6 ], [ 7, 8, 9 ] )\n\n","type":"( List.List a, List.List a, List.List a ) -> Zipper.ListListList.Zipper a"},{"name":"fromZipperListElemList","comment":"\n\n    ( [ 3, 2, 1 ], 5, [ 7, 8, 9 ] )\n    |> fromZipperListElemList (\\n -> [4, n, 6])\n        --> fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] )\n\n","type":"(a -> List.List a) -> ( List.List a, a, List.List a ) -> Zipper.ListListList.Zipper a"},{"name":"fromZipperListList","comment":"\n\n    ( [ 3, 2, 1 ], [ 7, 8, 9 ] )\n    |> fromZipperListList [4, 5, 6]\n        --> fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] )\n\n","type":"List.List a -> ( List.List a, List.List a ) -> Zipper.ListListList.Zipper a"},{"name":"getLeft","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] )\n        |> getLeft\n        --> [ 1, 2, 3 ]\n\n","type":"Zipper.ListListList.Zipper a -> List.List a"},{"name":"getRight","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] )\n        |> getRight\n        --> [ 7, 8, 9 ]\n\n","type":"Zipper.ListListList.Zipper a -> List.List a"},{"name":"getSelected","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] )\n        |> getSelected\n        --> [ 4, 5, 6 ]\n\n","type":"Zipper.ListListList.Zipper a -> List.List a"},{"name":"indexRelativeLeftToAbsolute","comment":"\n\n    zipper : Zipper Int\n    zipper = ( [ 0, 0, 0 ], [ 0, 0, 0 ], [ 0, 0, 0 ] )\n\n    indexRelativeLeftToAbsolute zipper (LeftIndex 2) --> 0\n\n    indexRelativeLeftToAbsolute zipper (LeftIndex 0) --> 2\n\n    indexRelativeLeftToAbsolute zipper (RightIndex 0) --> 3\n\n    indexRelativeLeftToAbsolute zipper (RightIndex 2) --> 5\n\n    indexRelativeLeftToAbsolute zipper (RightIndex 3) --> 6\n\n    indexRelativeLeftToAbsolute zipper (RightIndex 5) --> 8\n\n","type":"Zipper.ListListList.Zipper a -> Zipper.ListListList.RelativeIndex -> Basics.Int"},{"name":"indexRelativeRightToAbsolute","comment":"\n\n    zipper : Zipper Int\n    zipper = ( [ 0, 0, 0 ], [ 0, 0, 0 ], [ 0, 0, 0 ] )\n\n    indexRelativeRightToAbsolute zipper (LeftIndex 5) --> 0\n\n    indexRelativeRightToAbsolute zipper (LeftIndex 3) --> 2\n\n    indexRelativeRightToAbsolute zipper (LeftIndex 2) --> 3\n\n    indexRelativeRightToAbsolute zipper (LeftIndex 0) --> 5\n\n    indexRelativeRightToAbsolute zipper (RightIndex 0) --> 6\n\n    indexRelativeRightToAbsolute zipper (RightIndex 2) --> 8\n\n","type":"Zipper.ListListList.Zipper a -> Zipper.ListListList.RelativeIndex -> Basics.Int"},{"name":"indexedFilter","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] )\n        |> indexedFilter (\\{ section, rightEdge } val -> section == Left || rightEdge == 0 || val == 7)\n        --> fromTuple ( [ 1, 2, 3 ], [ 6 ], [ 7, 9 ] )\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] )\n        |> indexedFilter (\\{ leftEdge, rightEdge } val -> leftEdge == 0 || rightEdge == 0)\n        --> fromTuple ( [ 1, 3 ], [ 4, 6 ], [ 7, 9 ] )\n\n","type":"(Zipper.ListListList.Position -> a -> Basics.Bool) -> Zipper.ListListList.Zipper a -> Zipper.ListListList.Zipper a"},{"name":"indexedMap","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] )\n        |> indexedMap (\\{ first, leftEdge } val -> first * 100 + leftEdge * 10 + val)\n        --> fromTuple ( [ 1, 112, 223 ], [ 304, 415, 526 ], [ 607, 718, 829 ] )\n\n","type":"(Zipper.ListListList.Position -> a -> b) -> Zipper.ListListList.Zipper a -> Zipper.ListListList.Zipper b"},{"name":"insertFirst","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] )\n        |> insertFirst 0\n        --> fromTuple ( [ 0, 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] )\n\n","type":"a -> Zipper.ListListList.Zipper a -> Zipper.ListListList.Zipper a"},{"name":"insertLast","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] )\n        |> insertLast 0\n        --> fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9, 0 ] )\n\n","type":"a -> Zipper.ListListList.Zipper a -> Zipper.ListListList.Zipper a"},{"name":"insertLeftOfLeftSplit","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] )\n        |> insertLeftOfLeftSplit 0\n        --> fromTuple ( [ 1, 2, 3, 0 ], [ 4, 5, 6 ], [ 7, 8, 9 ] )\n\n","type":"a -> Zipper.ListListList.Zipper a -> Zipper.ListListList.Zipper a"},{"name":"insertLeftOfRightSplit","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] )\n        |> insertLeftOfRightSplit 0\n        --> fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6, 0 ], [ 7, 8, 9 ] )\n\n","type":"a -> Zipper.ListListList.Zipper a -> Zipper.ListListList.Zipper a"},{"name":"insertRightOfLeftSplit","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] )\n        |> insertRightOfLeftSplit 0\n        --> fromTuple ( [ 1, 2, 3 ], [ 0, 4, 5, 6 ], [ 7, 8, 9 ] )\n\n","type":"a -> Zipper.ListListList.Zipper a -> Zipper.ListListList.Zipper a"},{"name":"insertRightOfRightSplit","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] )\n        |> insertRightOfRightSplit 0\n        --> fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ], [ 0, 7, 8, 9 ] )\n\n","type":"a -> Zipper.ListListList.Zipper a -> Zipper.ListListList.Zipper a"},{"name":"length","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] )\n        |> length\n        --> 9\n\n","type":"Zipper.ListListList.Zipper a -> Basics.Int"},{"name":"map","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] )\n        |> map ((+) 10)\n        --> fromTuple ( [ 11, 12, 13 ], [ 14, 15, 16 ], [ 17, 18, 19 ] )\n\n","type":"(a -> b) -> Zipper.ListListList.Zipper a -> Zipper.ListListList.Zipper b"},{"name":"move","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] )\n        |> move MoveLeft MoveLast\n        --> Just (fromTuple ( [ 1, 2 ], [ 3, 4, 5, 6, 7, 8, 9 ], [] ))\n\n","type":"Zipper.ListListList.MoveDirection -> Zipper.ListListList.MoveDirection -> Zipper.ListListList.Zipper a -> Maybe.Maybe (Zipper.ListListList.Zipper a)"},{"name":"positionLeft","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] )\n        |> positionLeft\n        --> 3\n\n","type":"Zipper.ListListList.Zipper a -> Basics.Int"},{"name":"positionRight","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] )\n        |> positionRight\n        --> 6\n\n","type":"Zipper.ListListList.Zipper a -> Basics.Int"},{"name":"reverse","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] )\n        |> reverse\n        --> fromTuple ( [ 9, 8, 7 ], [ 6, 5, 4 ], [ 3, 2, 1 ] )\n\n","type":"Zipper.ListListList.Zipper a -> Zipper.ListListList.Zipper a"},{"name":"setLeft","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] )\n        |> setLeft [ 11, 12, 13 ]\n        --> fromTuple ( [ 11, 12, 13 ], [ 4, 5, 6 ], [ 7, 8, 9 ] )\n\n","type":"List.List a -> Zipper.ListListList.Zipper a -> Zipper.ListListList.Zipper a"},{"name":"setRight","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] )\n        |> setRight [ 17, 18, 19 ]\n        --> fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ], [ 17, 18, 19 ] )\n\n","type":"List.List a -> Zipper.ListListList.Zipper a -> Zipper.ListListList.Zipper a"},{"name":"setSelected","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] )\n        |> setSelected [ 14, 15, 16 ]\n        --> fromTuple ( [ 1, 2, 3 ], [ 14, 15, 16 ], [ 7, 8, 9 ] )\n\n","type":"List.List a -> Zipper.ListListList.Zipper a -> Zipper.ListListList.Zipper a"},{"name":"sortKeepIndexes","comment":" ","type":"Zipper.ListListList.Zipper comparable -> Zipper.ListListList.Zipper comparable"},{"name":"toList","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] )\n        |> toList\n        --> [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]\n\n","type":"Zipper.ListListList.Zipper a -> List.List a"},{"name":"toTuple","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] )\n        |> toTuple\n        --> ( [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] )\n\n","type":"Zipper.ListListList.Zipper a -> ( List.List a, List.List a, List.List a )"},{"name":"toZipperListElemList","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] )\n        |> toZipperListElemList List.sum\n        --> ( [ 3, 2, 1 ], 15, [ 7, 8, 9 ] )\n\n","type":"(List.List a -> a) -> Zipper.ListListList.Zipper a -> ( List.List a, a, List.List a )"},{"name":"toZipperListList","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] )\n        |> toZipperListList\n        --> ( [ 3, 2, 1 ], [ 7, 8, 9 ] )\n\n","type":"Zipper.ListListList.Zipper a -> ( List.List a, List.List a )"},{"name":"tryMove","comment":" ","type":"Zipper.ListListList.MoveDirection -> Zipper.ListListList.MoveDirection -> Zipper.ListListList.Zipper a -> Zipper.ListListList.Zipper a"},{"name":"update","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] )\n        |> update (\\elems -> 0 :: elems)\n        --> fromTuple ( [ 0, 1, 2, 3 ], [ 0, 4, 5, 6 ], [ 0, 7, 8, 9 ] )\n\n","type":"(List.List a -> List.List b) -> Zipper.ListListList.Zipper a -> Zipper.ListListList.Zipper b"},{"name":"updateLeft","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] )\n        |> updateLeft (\\elems -> 0 :: elems)\n        --> fromTuple ( [ 0, 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] )\n\n","type":"(List.List a -> List.List a) -> Zipper.ListListList.Zipper a -> Zipper.ListListList.Zipper a"},{"name":"updateRight","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] )\n        |> updateRight (\\elems -> 0 :: elems)\n        --> fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ], [ 0, 7, 8, 9 ] )\n\n","type":"(List.List a -> List.List a) -> Zipper.ListListList.Zipper a -> Zipper.ListListList.Zipper a"},{"name":"updateSelected","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] )\n        |> updateSelected (\\elems -> 0 :: elems)\n        --> fromTuple ( [ 1, 2, 3 ], [ 0, 4, 5, 6 ], [ 7, 8, 9 ] )\n\n","type":"(List.List a -> List.List a) -> Zipper.ListListList.Zipper a -> Zipper.ListListList.Zipper a"}],"binops":[]},{"name":"Zipper.ListListList.Advanced","comment":" A zipper with a list of selected elements.\n\n**Note**: If all zipper elements are of the same type, use [`Zipper.ListListList`](Zipper.ListListList) instead. It has a simpler API.\n\n  - General case of [`Zipper.ListListList`](Zipper.ListListList)\n  - General case of [`Zipper.StringStringString`](Zipper.StringStringString)\n\n\n# Definition\n\n@docs Zipper\n\n\n# Create\n\n@docs empty\n\n\n# From/to other Zippers\n\n@docs fromZipperListList, toZipperListList, fromZipperListElemList, toZipperListElemList\n\n\n# Get\n\n@docs getLeft\n\n\n# Move\n\n@docs moveLeftToLeft, moveLeftToLeftUntil, moveLeftToRight, moveLeftToRightUntil, moveRightToLeft, moveRightToLeftUntil, moveRightToRight, moveRightToRightUntil, moveToIndex\n\n","unions":[],"aliases":[{"name":"Zipper","comment":" A list type that must contain at least one element\n","args":["a","b","c"],"type":"( List.List a, List.List b, List.List c )"}],"values":[{"name":"empty","comment":" Create a new `Zipper`\n\n    make \"hello\" == ( \"hello\", \"hello\" )\n\n","type":"Zipper.ListListList.Advanced.Zipper a b c"},{"name":"fromZipperListElemList","comment":" Set selection to last element\n","type":"(b1 -> List.List b2) -> Zipper.ListElemList.Advanced.Zipper a b1 c -> Zipper.ListListList.Advanced.Zipper a b2 c"},{"name":"fromZipperListList","comment":" Set selection to last element\n","type":"List.List b -> Zipper.ListList.Advanced.Zipper a c -> Zipper.ListListList.Advanced.Zipper a b c"},{"name":"getLeft","comment":" Set selection to last element\n","type":"Zipper.ListListList.Advanced.Zipper a b c -> List.List a"},{"name":"moveLeftToLeft","comment":" ","type":"(a -> b) -> Zipper.ListListList.Advanced.Zipper a b c -> Maybe.Maybe (Zipper.ListListList.Advanced.Zipper a b c)"},{"name":"moveLeftToLeftUntil","comment":" ","type":"(a -> b) -> (List.List a -> List.List b -> List.List c -> Basics.Bool) -> Zipper.ListListList.Advanced.Zipper a b c -> Maybe.Maybe (Zipper.ListListList.Advanced.Zipper a b c)"},{"name":"moveLeftToRight","comment":" ","type":"(a -> b) -> Zipper.ListListList.Advanced.Zipper a b c -> Maybe.Maybe (Zipper.ListListList.Advanced.Zipper a b c)"},{"name":"moveLeftToRightUntil","comment":" ","type":"(a -> b) -> (List.List a -> List.List b -> List.List c -> Basics.Bool) -> Zipper.ListListList.Advanced.Zipper a b c -> Maybe.Maybe (Zipper.ListListList.Advanced.Zipper a b c)"},{"name":"moveRightToLeft","comment":" ","type":"(a -> b) -> Zipper.ListListList.Advanced.Zipper a b c -> Maybe.Maybe (Zipper.ListListList.Advanced.Zipper a b c)"},{"name":"moveRightToLeftUntil","comment":" ","type":"(a -> b) -> (List.List a -> List.List b -> List.List c -> Basics.Bool) -> Zipper.ListListList.Advanced.Zipper a b c -> Maybe.Maybe (Zipper.ListListList.Advanced.Zipper a b c)"},{"name":"moveRightToRight","comment":" ","type":"(a -> b) -> Zipper.ListListList.Advanced.Zipper a b c -> Maybe.Maybe (Zipper.ListListList.Advanced.Zipper a b c)"},{"name":"moveRightToRightUntil","comment":" ","type":"(a -> b) -> (List.List a -> List.List b -> List.List c -> Basics.Bool) -> Zipper.ListListList.Advanced.Zipper a b c -> Maybe.Maybe (Zipper.ListListList.Advanced.Zipper a b c)"},{"name":"moveToIndex","comment":" ","type":"(a -> b) -> (b -> a) -> (b -> c) -> (c -> b) -> Basics.Int -> Basics.Int -> Zipper.ListListList.Advanced.Zipper a b c -> Maybe.Maybe (Zipper.ListListList.Advanced.Zipper a b c)"},{"name":"toZipperListElemList","comment":" Set selection to last element\n","type":"(List.List b1 -> b2) -> Zipper.ListListList.Advanced.Zipper a b1 c -> Zipper.ListElemList.Advanced.Zipper a b2 c"},{"name":"toZipperListList","comment":" Set selection to last element\n","type":"Zipper.ListListList.Advanced.Zipper a b c -> Zipper.ListList.Advanced.Zipper a c"}],"binops":[]},{"name":"Zipper.ListListList.Extra","comment":" A special case of `Zipper3.SelectList.Zipper` where all elements have the same type.\n\nIf you're working with Chars, check out [`Zipper.StringStringString`](Zipper.StringStringString)\n\n  - Special case of [`Zipper.ListListList.Advanced`](Zipper.ListListList.Advanced)\n  - General case of [`Zipper.StringString`](Zipper.StringString)\n\n\n# Definition\n\n\n# Create\n\n\n# To\n\n\n# Length\n\n@docs lengthLeft, lengthSelected, lengthRight, positionLeftFromEnd, positionRightFromEnd\n\n\n# Get\n\n@docs getAt, getAtRelativeLeft, getAtRelativeRight\n\n\n# Set\n\n@docs setAt, trySetAt, setAtRelativeLeft, trySetAtRelativeLeft, setAtRelativeRight, trySetAtRelativeRight\n\n\n# Map\n\n@docs mapSeparately, mapLeft, mapSelected, mapRight, indexedMapSeparately, indexedMapLeft, indexedMapSelected, indexedMapRight\n\n\n# Update\n\n@docs updateSeparately, updateAt, tryUpdateAt, updateAtRelativeLeft, tryUpdateAtRelativeLeft, updateAtRelativeRight, tryUpdateAtRelativeRight\n\n\n# Filter\n\n@docs filterSeparately, filterLeft, filterSelected, filterRight, indexedFilterLeft, indexedFilterSelected, indexedFilterRight\n\n\n# Move\n\n@docs moveToN, tryMoveToN, moveLeftToLeftUntil, moveLeftToRightUntil, moveRightToLeftUntil, moveRightToRightUntil\n\n\n# Insert\n\n\n# Reverse\n\n@docs reverseLeft, reverseSelected, reverseRight\n\n\n# Swap\n\n@docs swap\n\n\n# Sort\n\n@docs sortByKeepIndexes, sortWithKeepIndexes\n\n\n# Indexes\n\n","unions":[],"aliases":[],"values":[{"name":"filterLeft","comment":" ","type":"(a -> Basics.Bool) -> Zipper.ListListList.Zipper a -> Zipper.ListListList.Zipper a"},{"name":"filterRight","comment":" ","type":"(a -> Basics.Bool) -> Zipper.ListListList.Zipper a -> Zipper.ListListList.Zipper a"},{"name":"filterSelected","comment":" ","type":"(a -> Basics.Bool) -> Zipper.ListListList.Zipper a -> Zipper.ListListList.Zipper a"},{"name":"filterSeparately","comment":" ","type":"(a -> Basics.Bool) -> (a -> Basics.Bool) -> (a -> Basics.Bool) -> Zipper.ListListList.Zipper a -> Zipper.ListListList.Zipper a"},{"name":"getAt","comment":" ","type":"Basics.Int -> Zipper.ListListList.Zipper a -> Maybe.Maybe a"},{"name":"getAtRelativeLeft","comment":" ","type":"Zipper.ListListList.RelativeIndex -> Zipper.ListListList.Zipper a -> Maybe.Maybe a"},{"name":"getAtRelativeRight","comment":"\n\n    zipper : Zipper Int\n    zipper = fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] )\n\n    zipper |> getAtRelativeRight (LeftIndex 6) --> Nothing\n\n    zipper |> getAtRelativeRight (LeftIndex 5) --> Just 1\n\n    zipper |> getAtRelativeRight (LeftIndex 3) --> Just 3\n\n    zipper |> getAtRelativeRight (LeftIndex 2) --> Just 4\n\n    zipper |> getAtRelativeRight (LeftIndex 0) --> Just 6\n\n    zipper |> getAtRelativeRight (RightIndex 0) --> Just 7\n\n    zipper |> getAtRelativeRight (RightIndex 2) --> Just 9\n\n    zipper |> getAtRelativeRight (RightIndex 3) --> Nothing\n\n","type":"Zipper.ListListList.RelativeIndex -> Zipper.ListListList.Zipper a -> Maybe.Maybe a"},{"name":"indexedFilterLeft","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] )\n        |> indexedFilter (\\pos { rightEdge } val -> pos == Left || rightEdge == 0 || val == 7)\n        --> fromTuple ( [ 1, 2, 3 ], [ 6 ], [ 7, 9 ] )\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] )\n        |> indexedFilter (\\_ { leftEdge, rightEdge } val -> leftEdge == 0 || rightEdge == 0)\n        --> fromTuple ( [ 1, 3 ], [ 4, 6 ], [ 7, 9 ] )\n\n","type":"(Zipper.ListListList.Position -> a -> Basics.Bool) -> Zipper.ListListList.Zipper a -> Zipper.ListListList.Zipper a"},{"name":"indexedFilterRight","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] )\n        |> indexedFilter (\\pos { rightEdge } val -> pos == Left || rightEdge == 0 || val == 7)\n        --> fromTuple ( [ 1, 2, 3 ], [ 6 ], [ 7, 9 ] )\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] )\n        |> indexedFilter (\\_ { leftEdge, rightEdge } val -> leftEdge == 0 || rightEdge == 0)\n        --> fromTuple ( [ 1, 3 ], [ 4, 6 ], [ 7, 9 ] )\n\n","type":"(Zipper.ListListList.Position -> a -> Basics.Bool) -> Zipper.ListListList.Zipper a -> Zipper.ListListList.Zipper a"},{"name":"indexedFilterSelected","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] )\n        |> indexedFilter (\\pos { rightEdge } val -> pos == Left || rightEdge == 0 || val == 7)\n        --> fromTuple ( [ 1, 2, 3 ], [ 6 ], [ 7, 9 ] )\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] )\n        |> indexedFilter (\\_ { leftEdge, rightEdge } val -> leftEdge == 0 || rightEdge == 0)\n        --> fromTuple ( [ 1, 3 ], [ 4, 6 ], [ 7, 9 ] )\n\n","type":"(Zipper.ListListList.Position -> a -> Basics.Bool) -> Zipper.ListListList.Zipper a -> Zipper.ListListList.Zipper a"},{"name":"indexedMapLeft","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] )\n        |> indexedMap (\\_ { first, leftEdge } val -> first * 100 + leftEdge * 10 + val)\n        --> fromTuple ( [ 1, 112, 223 ], [ 304, 415, 526 ], [ 607, 718, 829 ] )\n\n","type":"(Zipper.ListListList.Position -> a -> a) -> Zipper.ListListList.Zipper a -> Zipper.ListListList.Zipper a"},{"name":"indexedMapRight","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] )\n        |> indexedMap (\\_ { first, leftEdge } val -> first * 100 + leftEdge * 10 + val)\n        --> fromTuple ( [ 1, 112, 223 ], [ 304, 415, 526 ], [ 607, 718, 829 ] )\n\n","type":"(Zipper.ListListList.Position -> a -> a) -> Zipper.ListListList.Zipper a -> Zipper.ListListList.Zipper a"},{"name":"indexedMapSelected","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] )\n        |> indexedMap (\\_ { first, leftEdge } val -> first * 100 + leftEdge * 10 + val)\n        --> fromTuple ( [ 1, 112, 223 ], [ 304, 415, 526 ], [ 607, 718, 829 ] )\n\n","type":"(Zipper.ListListList.Position -> a -> a) -> Zipper.ListListList.Zipper a -> Zipper.ListListList.Zipper a"},{"name":"indexedMapSeparately","comment":"\n\n    fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] )\n        |> indexedMap (\\_ { first, leftEdge } val -> first * 100 + leftEdge * 10 + val)\n        --> fromTuple ( [ 1, 112, 223 ], [ 304, 415, 526 ], [ 607, 718, 829 ] )\n\n","type":"(Zipper.ListListList.Position -> a -> b) -> (Zipper.ListListList.Position -> a -> b) -> (Zipper.ListListList.Position -> a -> b) -> Zipper.ListListList.Zipper a -> Zipper.ListListList.Zipper b"},{"name":"lengthLeft","comment":" ","type":"Zipper.ListListList.Zipper a -> Basics.Int"},{"name":"lengthRight","comment":" ","type":"Zipper.ListListList.Zipper a -> Basics.Int"},{"name":"lengthSelected","comment":" ","type":"Zipper.ListListList.Zipper a -> Basics.Int"},{"name":"mapLeft","comment":" ","type":"(a -> a) -> Zipper.ListListList.Zipper a -> Zipper.ListListList.Zipper a"},{"name":"mapRight","comment":" ","type":"(a -> a) -> Zipper.ListListList.Zipper a -> Zipper.ListListList.Zipper a"},{"name":"mapSelected","comment":" ","type":"(a -> a) -> Zipper.ListListList.Zipper a -> Zipper.ListListList.Zipper a"},{"name":"mapSeparately","comment":" ","type":"(a -> b) -> (a -> b) -> (a -> b) -> Zipper.ListListList.Zipper a -> Zipper.ListListList.Zipper b"},{"name":"moveLeftToLeftUntil","comment":" ","type":"(List.List a -> List.List a -> List.List a -> Basics.Bool) -> Zipper.ListListList.Zipper a -> Maybe.Maybe (Zipper.ListListList.Zipper a)"},{"name":"moveLeftToRightUntil","comment":" ","type":"(List.List a -> List.List a -> List.List a -> Basics.Bool) -> Zipper.ListListList.Zipper a -> Maybe.Maybe (Zipper.ListListList.Zipper a)"},{"name":"moveRightToLeftUntil","comment":" ","type":"(List.List a -> List.List a -> List.List a -> Basics.Bool) -> Zipper.ListListList.Zipper a -> Maybe.Maybe (Zipper.ListListList.Zipper a)"},{"name":"moveRightToRightUntil","comment":" ","type":"(List.List a -> List.List a -> List.List a -> Basics.Bool) -> Zipper.ListListList.Zipper a -> Maybe.Maybe (Zipper.ListListList.Zipper a)"},{"name":"moveToN","comment":" ","type":"Basics.Int -> Basics.Int -> Zipper.ListListList.Zipper a -> Maybe.Maybe (Zipper.ListListList.Zipper a)"},{"name":"positionLeftFromEnd","comment":" ","type":"Zipper.ListListList.Zipper a -> Basics.Int"},{"name":"positionRightFromEnd","comment":" ","type":"Zipper.ListListList.Zipper a -> Basics.Int"},{"name":"reverseLeft","comment":" ","type":"Zipper.ListListList.Zipper a -> Zipper.ListListList.Zipper a"},{"name":"reverseRight","comment":" ","type":"Zipper.ListListList.Zipper a -> Zipper.ListListList.Zipper a"},{"name":"reverseSelected","comment":" ","type":"Zipper.ListListList.Zipper a -> Zipper.ListListList.Zipper a"},{"name":"setAt","comment":" ","type":"Basics.Int -> a -> Zipper.ListListList.Zipper a -> Maybe.Maybe (Zipper.ListListList.Zipper a)"},{"name":"setAtRelativeLeft","comment":" ","type":"Zipper.ListListList.RelativeIndex -> a -> Zipper.ListListList.Zipper a -> Maybe.Maybe (Zipper.ListListList.Zipper a)"},{"name":"setAtRelativeRight","comment":" ","type":"Zipper.ListListList.RelativeIndex -> a -> Zipper.ListListList.Zipper a -> Maybe.Maybe (Zipper.ListListList.Zipper a)"},{"name":"sortByKeepIndexes","comment":" ","type":"(a -> comparable) -> Zipper.ListListList.Zipper a -> Zipper.ListListList.Zipper a"},{"name":"sortWithKeepIndexes","comment":" ","type":"(a -> a -> Basics.Order) -> Zipper.ListListList.Zipper a -> Zipper.ListListList.Zipper a"},{"name":"swap","comment":" ","type":"Zipper.ListListList.Zipper a -> Zipper.ListListList.Zipper a"},{"name":"tryMoveToN","comment":" ","type":"Basics.Int -> Basics.Int -> Zipper.ListListList.Zipper a -> Zipper.ListListList.Zipper a"},{"name":"trySetAt","comment":" ","type":"Basics.Int -> a -> Zipper.ListListList.Zipper a -> Zipper.ListListList.Zipper a"},{"name":"trySetAtRelativeLeft","comment":" ","type":"Zipper.ListListList.RelativeIndex -> a -> Zipper.ListListList.Zipper a -> Zipper.ListListList.Zipper a"},{"name":"trySetAtRelativeRight","comment":" ","type":"Zipper.ListListList.RelativeIndex -> a -> Zipper.ListListList.Zipper a -> Zipper.ListListList.Zipper a"},{"name":"tryUpdateAt","comment":" ","type":"Basics.Int -> (a -> a) -> Zipper.ListListList.Zipper a -> Zipper.ListListList.Zipper a"},{"name":"tryUpdateAtRelativeLeft","comment":" ","type":"Zipper.ListListList.RelativeIndex -> (a -> a) -> Zipper.ListListList.Zipper a -> Zipper.ListListList.Zipper a"},{"name":"tryUpdateAtRelativeRight","comment":" ","type":"Zipper.ListListList.RelativeIndex -> (a -> a) -> Zipper.ListListList.Zipper a -> Zipper.ListListList.Zipper a"},{"name":"updateAt","comment":"\n\n    zipper : Zipper Int\n    zipper = fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] )\n\n    updateAt 2 ((+) 10) zipper\n        --> Just (fromTuple ( [ 1, 2, 13 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ))\n\n    updateAt 5 ((+) 10) zipper\n        --> Just (fromTuple ( [ 1, 2, 3 ], [ 4, 5, 16 ], [ 7, 8, 9 ] ))\n\n    updateAt 9 ((+) 10) zipper\n        --> Nothing\n\n","type":"Basics.Int -> (a -> a) -> Zipper.ListListList.Zipper a -> Maybe.Maybe (Zipper.ListListList.Zipper a)"},{"name":"updateAtRelativeLeft","comment":" ","type":"Zipper.ListListList.RelativeIndex -> (a -> a) -> Zipper.ListListList.Zipper a -> Maybe.Maybe (Zipper.ListListList.Zipper a)"},{"name":"updateAtRelativeRight","comment":" ","type":"Zipper.ListListList.RelativeIndex -> (a -> a) -> Zipper.ListListList.Zipper a -> Maybe.Maybe (Zipper.ListListList.Zipper a)"},{"name":"updateSeparately","comment":" ","type":"(List.List a -> List.List b) -> (List.List a -> List.List b) -> (List.List a -> List.List b) -> Zipper.ListListList.Zipper a -> Zipper.ListListList.Zipper b"}],"binops":[]},{"name":"Zipper.StringCharString","comment":" A zipper type that is stores a single selected character, with a list of characters on either side. Probably most useful for terminal-like interfaces where the cursor selects a character rather than lying between characters.\n\nA special case of [`Zipper.ListElemList`](Zipper.ListElemList) for when the elements are `Char`, and some helper functions\n\n  - Special case of [`Zipper.ListElemList.Advanced`](Zipper.ListElemList.Advanced)\n  - Special case of [`Zipper.ListElemList`](Zipper.ListElemList)\n\n\n# Definition\n\n@docs Zipper\n\n\n# Create\n\n@docs singleton\n\n\n# Move\n\n@docs moveLeft\n\n","unions":[],"aliases":[{"name":"Zipper","comment":" A list type that must contain at least one element\n","args":[],"type":"( List.List Char.Char, Char.Char, List.List Char.Char )"}],"values":[{"name":"moveLeft","comment":" Attempt to move selection to left\n\n    ( [ 2, 1 ], 3, [ 4, 5 ] ) |> moveLeft == Ok ( [ 1 ], 2, [ 3, 4, 5 ] )\n\n    ( [], 3, [ 4, 5 ] ) |> moveLeft == Err ( [], 3, [ 4, 5 ] )\n\n","type":"Zipper.StringCharString.Zipper -> Maybe.Maybe Zipper.StringCharString.Zipper"},{"name":"singleton","comment":" Create a new `Zipper`\n\n    singleton 'a' == ( [], 'a', [] )\n\n","type":"Char.Char -> Zipper.StringCharString.Zipper"}],"binops":[]},{"name":"Zipper.StringString","comment":" A library for a template type.\n\n  - Special case of [`Zipper.ListList.Advanced`](Zipper.ListList.Advanced)\n  - Special case of [`Zipper.ListList`](Zipper.ListList)\n\n\n# Definition\n\n@docs Zipper\n\n\n# Create\n\n@docs toStrings\n\n","unions":[],"aliases":[{"name":"Zipper","comment":" A list type that must contain at least one element\n","args":[],"type":"( List.List Char.Char, List.List Char.Char )"}],"values":[{"name":"toStrings","comment":" Create a new `Zipper2`\n\n    make \"hello\" == ( \"hello\", \"hello\" )\n\n","type":"Zipper.StringString.Zipper -> ( String.String, String.String )"}],"binops":[]},{"name":"Zipper.StringStringString","comment":" A special case of `Zipper3.SelectList.Simple` for when the elements are `Char`, and some helper functions\n\n  - Special case of [`Zipper.ListListList.Advanced`](Zipper.ListListList.Advanced)\n  - Special case of [`Zipper.ListListList`](Zipper.ListListList)\n\n\n# Definition\n\n@docs Zipper\n\n\n# Create\n\n@docs empty\n\n","unions":[],"aliases":[{"name":"Zipper","comment":" A list type that must contain at least one element\n","args":[],"type":"( List.List Char.Char, List.List Char.Char, List.List Char.Char )"}],"values":[{"name":"empty","comment":" Create a new `Zipper`\n\n    make \"hello\" == ( \"hello\", \"hello\" )\n\n","type":"Zipper.StringStringString.Zipper"}],"binops":[]},{"name":"Zipper.StringStringString.WithCursor","comment":" Not a clear special case or general case of any of the other zipper types.\n\n\n# Definition\n\n@docs Zipper\n\n\n# Create\n\n@docs empty\n\n\n# Apply key\n\n@docs arrowLeft, arrowLeftWithShift, arrowRight, arrowRightWithShift, typeKey\n\n","unions":[{"name":"Zipper","comment":" A list type that must contain at least one element\n","args":[],"cases":[["CursorLeft",["( List.List Char.Char, ( Char.Char, List.List Char.Char ), List.List Char.Char )"]],["CursorRight",["( List.List Char.Char, ( List.List Char.Char, Char.Char ), List.List Char.Char )"]],["CursorNone",["( List.List Char.Char, List.List Char.Char )"]]]}],"aliases":[],"values":[{"name":"arrowLeft","comment":" Matches what happens when hitting the arrow left key _without_ holding Shift.\n\n    -- shown as String instead of List Char for readability\n    CursorNone ( \"ab\", \"cd\" )\n        |> arrowLeft\n        == CursorNone ( \"a\", \"bcd\" )\n\n    CursorNone ( \"\", \"cd\" )\n        |> arrowLeft\n        == CursorNone ( \"\", \"cd\" )\n\n    CursorLeft ( \"ab\", \"cde\", \"fg\" )\n        |> arrowLeft\n        == CursorNone ( \"ab\", \"cdefg\" )\n\n    CursorRight ( \"ab\", \"cde\", \"fg\" )\n        |> arrowLeft\n        == CursorNone ( \"ab\", \"cdefg\" )\n\n","type":"Zipper.StringStringString.WithCursor.Zipper -> Zipper.StringStringString.WithCursor.Zipper"},{"name":"arrowLeftWithShift","comment":" Matches what happens when hitting the arrow left key _while_ holding Shift.\n\n    -- shown as String instead of List Char for readability\n    CursorNone ( \"ab\", \"cd\" )\n        |> arrowLeftWithShift\n        == CursorLeft ( \"a\", \"b\", \"cd\" )\n\n    CursorNone ( \"\", \"cd\" )\n        |> arrowLeftWithShift\n        == CursorNone ( \"\", \"cd\" )\n\n    CursorLeft ( \"ab\", \"cde\", \"fg\" )\n        |> arrowLeftWithShift\n        == CursorLeft ( \"a\", \"bcde\", \"fg\" )\n\n    CursorLeft ( \"\", \"cde\", \"fg\" )\n        |> arrowLeftWithShift\n        == CursorLeft ( \"\", \"cde\", \"fg\" )\n\n    CursorRight ( \"ab\", \"cde\", \"fg\" )\n        |> arrowLeftWithShift\n        == CursorNone ( \"ab\", \"cd\", \"efg\" )\n\n","type":"Zipper.StringStringString.WithCursor.Zipper -> Zipper.StringStringString.WithCursor.Zipper"},{"name":"arrowRight","comment":" Matches what happens when hitting the arrow right key _without_ holding Shift.\n\n    -- shown as String instead of List Char for readability\n    CursorNone ( \"ab\", \"cd\" )\n        |> arrowRight\n        == CursorNone ( \"abc\", \"d\" )\n\n    CursorNone ( \"ab\", \"\" )\n        |> arrowRight\n        == CursorNone ( \"ab\", \"\" )\n\n    CursorLeft ( \"ab\", \"cde\", \"fg\" )\n        |> arrowRight\n        == CursorNone ( \"abcde\", \"fg\" )\n\n    CursorRight ( \"ab\", \"cde\", \"fg\" )\n        |> arrowRight\n        == CursorNone ( \"abcde\", \"fg\" )\n\n","type":"Zipper.StringStringString.WithCursor.Zipper -> Zipper.StringStringString.WithCursor.Zipper"},{"name":"arrowRightWithShift","comment":" Matches what happens when hitting the arrow right key _while_ holding Shift.\n\n    -- shown as String instead of List Char for readability\n    CursorNone ( \"ab\", \"cd\" )\n        |> arrowRightWithShift\n        == CursorLeft ( \"a\", \"b\", \"cd\" )\n\n    CursorNone ( \"ab\", \"\" )\n        |> arrowRightWithShift\n        == CursorNone ( \"\", \"cd\" )\n\n    CursorLeft ( \"ab\", \"cde\", \"fg\" )\n        |> arrowRightWithShift\n        == CursorLeft ( \"abc\", \"de\", \"fg\" )\n\n    CursorRight ( \"ab\", \"cde\", \"\" )\n        |> arrowRightWithShift\n        == CursorLeft ( \"ab\", \"cde\", \"\" )\n\n    CursorRight ( \"ab\", \"cde\", \"fg\" )\n        |> arrowRightWithShift\n        == CursorNone ( \"ab\", \"cdef\", \"g\" )\n\n","type":"Zipper.StringStringString.WithCursor.Zipper -> Zipper.StringStringString.WithCursor.Zipper"},{"name":"empty","comment":" Create a new `Zipper`\n\n    empty --> CursorNone ( [], [] )\n\n","type":"Zipper.StringStringString.WithCursor.Zipper"},{"name":"typeKey","comment":" Matches what happens when hitting a non-arrow key\n\n    -- shown as String instead of List Char for readability\n    CursorNone ( \"ab\", \"cd\" )\n        |> arrowRightWithShift \"z\"\n        == CursorNone ( \"abz\", \"cd\" )\n\n    CursorLeft ( \"ab\", \"cde\", \"fg\" )\n        |> arrowRightWithShift\n        == CursorNone ( \"abz\", \"fg\" )\n\n    CursorRight ( \"ab\", \"cde\", \"fg\" )\n        |> arrowRightWithShift\n        == CursorNone ( \"abz\", \"fg\" )\n\n","type":"Char.Char -> Zipper.StringStringString.WithCursor.Zipper -> Zipper.StringStringString.WithCursor.Zipper"}],"binops":[]}]