coreygirard/elm-zipper/1.0.0

Zipper.ListListList.Extra

A special case of Zipper3.SelectList.Zipper where all elements have the same type.

If you're working with Chars, check out Zipper.StringStringString

Definition

Create

To

Length

lengthLeft : Zipper a -> Int
lengthSelected : Zipper a -> Int
lengthRight : Zipper a -> Int
positionLeftFromEnd : Zipper a -> Int
positionRightFromEnd : Zipper a -> Int

Get

getAt : Int -> Zipper a -> Maybe a
getAtRelativeLeft : RelativeIndex -> Zipper a -> Maybe a
getAtRelativeRight : RelativeIndex -> Zipper a -> Maybe a
zipper : 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) --> Nothing

Set

setAt : Int -> a -> Zipper a -> Maybe (Zipper a)
trySetAt : Int -> a -> Zipper a -> Zipper a
setAtRelativeLeft : RelativeIndex -> a -> Zipper a -> Maybe (Zipper a)
trySetAtRelativeLeft : RelativeIndex -> a -> Zipper a -> Zipper a
setAtRelativeRight : RelativeIndex -> a -> Zipper a -> Maybe (Zipper a)
trySetAtRelativeRight : RelativeIndex -> a -> Zipper a -> Zipper a

Map

mapSeparately : (a -> b) -> (a -> b) -> (a -> b) -> Zipper a -> Zipper b
mapLeft : (a -> a) -> Zipper a -> Zipper a
mapSelected : (a -> a) -> Zipper a -> Zipper a
mapRight : (a -> a) -> Zipper a -> Zipper a
(Position -> a -> b)
-> (Position -> a -> b)
-> (Position -> a -> b)
-> Zipper a
-> Zipper b
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 ] )
indexedMapLeft : (Position -> a -> a) -> Zipper a -> Zipper a
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 ] )
indexedMapSelected : (Position -> a -> a) -> Zipper a -> Zipper a
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 ] )
indexedMapRight : (Position -> a -> a) -> Zipper a -> Zipper a
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 ] )

Update

(List a -> List b)
-> (List a -> List b)
-> (List a -> List b)
-> Zipper a
-> Zipper b
updateAt : Int -> (a -> a) -> Zipper a -> Maybe (Zipper a)
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
    --> Nothing
tryUpdateAt : Int -> (a -> a) -> Zipper a -> Zipper a
updateAtRelativeLeft : RelativeIndex -> (a -> a) -> Zipper a -> Maybe (Zipper a)
tryUpdateAtRelativeLeft : RelativeIndex -> (a -> a) -> Zipper a -> Zipper a
updateAtRelativeRight : RelativeIndex -> (a -> a) -> Zipper a -> Maybe (Zipper a)
tryUpdateAtRelativeRight : RelativeIndex -> (a -> a) -> Zipper a -> Zipper a

Filter

filterSeparately : (a -> Bool) -> (a -> Bool) -> (a -> Bool) -> Zipper a -> Zipper a
filterLeft : (a -> Bool) -> Zipper a -> Zipper a
filterSelected : (a -> Bool) -> Zipper a -> Zipper a
filterRight : (a -> Bool) -> Zipper a -> Zipper a
indexedFilterLeft : (Position -> a -> Bool) -> Zipper a -> Zipper a
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 ] )
indexedFilterSelected : (Position -> a -> Bool) -> Zipper a -> Zipper a
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 ] )
indexedFilterRight : (Position -> a -> Bool) -> Zipper a -> Zipper a
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 ] )

Move

moveToN : Int -> Int -> Zipper a -> Maybe (Zipper a)
tryMoveToN : Int -> Int -> Zipper a -> Zipper a
moveLeftToLeftUntil : (List a -> List a -> List a -> Bool) -> Zipper a -> Maybe (Zipper a)
moveLeftToRightUntil : (List a -> List a -> List a -> Bool) -> Zipper a -> Maybe (Zipper a)
moveRightToLeftUntil : (List a -> List a -> List a -> Bool) -> Zipper a -> Maybe (Zipper a)
moveRightToRightUntil : (List a -> List a -> List a -> Bool) -> Zipper a -> Maybe (Zipper a)

Insert

Reverse

reverseLeft : Zipper a -> Zipper a
reverseSelected : Zipper a -> Zipper a
reverseRight : Zipper a -> Zipper a

Swap

swap : Zipper a -> Zipper a

Sort

sortByKeepIndexes : (a -> comparable) -> Zipper a -> Zipper a
sortWithKeepIndexes : (a -> a -> Order) -> Zipper a -> Zipper a

Indexes