A special case of Zipper3.SelectList.Zipper where all elements have the same type.
If you're working with Chars, check out Zipper.StringStringString
Zipper.ListListList.AdvancedZipper.StringStringzipper : Zipper Int
zipper = fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] )
zipper |> getAtRelativeRight (LeftIndex 6) --> Nothing
zipper |> getAtRelativeRight (LeftIndex 5) --> Just 1
zipper |> getAtRelativeRight (LeftIndex 3) --> Just 3
zipper |> getAtRelativeRight (LeftIndex 2) --> Just 4
zipper |> getAtRelativeRight (LeftIndex 0) --> Just 6
zipper |> getAtRelativeRight (RightIndex 0) --> Just 7
zipper |> getAtRelativeRight (RightIndex 2) --> Just 9
zipper |> getAtRelativeRight (RightIndex 3) --> NothingfromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] )
|> indexedMap (\_ { first, leftEdge } val -> first * 100 + leftEdge * 10 + val)
--> fromTuple ( [ 1, 112, 223 ], [ 304, 415, 526 ], [ 607, 718, 829 ] )fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] )
|> indexedMap (\_ { first, leftEdge } val -> first * 100 + leftEdge * 10 + val)
--> fromTuple ( [ 1, 112, 223 ], [ 304, 415, 526 ], [ 607, 718, 829 ] )fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] )
|> indexedMap (\_ { first, leftEdge } val -> first * 100 + leftEdge * 10 + val)
--> fromTuple ( [ 1, 112, 223 ], [ 304, 415, 526 ], [ 607, 718, 829 ] )fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] )
|> indexedMap (\_ { first, leftEdge } val -> first * 100 + leftEdge * 10 + val)
--> fromTuple ( [ 1, 112, 223 ], [ 304, 415, 526 ], [ 607, 718, 829 ] )zipper : Zipper Int
zipper = fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] )
updateAt 2 ((+) 10) zipper
--> Just (fromTuple ( [ 1, 2, 13 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ))
updateAt 5 ((+) 10) zipper
--> Just (fromTuple ( [ 1, 2, 3 ], [ 4, 5, 16 ], [ 7, 8, 9 ] ))
updateAt 9 ((+) 10) zipper
--> NothingfromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] )
|> indexedFilter (\pos { rightEdge } val -> pos == Left || rightEdge == 0 || val == 7)
--> fromTuple ( [ 1, 2, 3 ], [ 6 ], [ 7, 9 ] )
fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] )
|> indexedFilter (\_ { leftEdge, rightEdge } val -> leftEdge == 0 || rightEdge == 0)
--> fromTuple ( [ 1, 3 ], [ 4, 6 ], [ 7, 9 ] )fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] )
|> indexedFilter (\pos { rightEdge } val -> pos == Left || rightEdge == 0 || val == 7)
--> fromTuple ( [ 1, 2, 3 ], [ 6 ], [ 7, 9 ] )
fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] )
|> indexedFilter (\_ { leftEdge, rightEdge } val -> leftEdge == 0 || rightEdge == 0)
--> fromTuple ( [ 1, 3 ], [ 4, 6 ], [ 7, 9 ] )fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] )
|> indexedFilter (\pos { rightEdge } val -> pos == Left || rightEdge == 0 || val == 7)
--> fromTuple ( [ 1, 2, 3 ], [ 6 ], [ 7, 9 ] )
fromTuple ( [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] )
|> indexedFilter (\_ { leftEdge, rightEdge } val -> leftEdge == 0 || rightEdge == 0)
--> fromTuple ( [ 1, 3 ], [ 4, 6 ], [ 7, 9 ] )