# Data.List.Zipper

A Zipper implementation for Lists
inspired by
https://hackage.haskell.org/package/ListZipper-1.2.0.2/docs/src/Data-List-Zipper.html

data Zipper : Type -> Type

  A Zipper for Lists

  Zip : List a -> List a -> Zipper a
cursor : Zipper a -> Maybe a

  gets the element at the current cursor

      cursor $ fromList [1,2,3,4,5]

delete : Zipper a -> Zipper a

  delete the element at the current cursor

      show $ Data.List.Zipper.delete $ fromList [1,2,3,4,5]

empty : Zipper a

  creates an empty Zipper

      empty {a = Nat}

end : Zipper a -> Zipper a

  move the cursor to the end of the Zipper

      show $ end $ fromList [1,2,3,4,5]

endp : Zipper a -> Bool

  checks whether the cursor is at the end of the Zipper

      endp $ fromList [1,2,3,4,5]

fromList : List a -> Zipper a

  creates a Zipper from a List

      show $ fromList [1,2,3,4,5]

index : Zipper a -> Nat

  Return the index of the current cursor

      index $ fromList [1,2,3,4,5]

insert : a -> Zipper a -> Zipper a

  inserts an element at the current cursor

      show $ insert 0 $ fromList [1,2,3,4,5]

isEmpty : Zipper a -> Bool

  checks whether this Zipper is empty

      isEmpty empty {a = Nat}

left : Zipper a -> Zipper a

  moves the cursor to the left or leaves the cursor unchanged

      show $ left $ fromList [1,2,3,4,5]

pop : Zipper a -> Zipper a

  pop an element from the Zipper

      show $ pop $ right $ fromList [1,2,3,4,5]

push : a -> Zipper a -> Zipper a

  push an element into the Zipper and move the cursor past it

      show $ push 0 $ fromList [1,2,3,4,5]

replace : a -> Zipper a -> Zipper a

  remove an element from the zipper

      show $ replace 9 $ fromList[1,2,3,4,5]

right : Zipper a -> Zipper a

  moves the cursor to the right or leaves the cursor unchanged

      show $ right $ fromList [1,2,3,4,5]

start : Zipper a -> Zipper a

  move the cursor to the start of the Zipper

      show $ start $ fromList [1,2,3,4,5]

startp : Zipper a -> Bool

  checks whether the cursor is at the start of the Zipper

      startp $ fromList [1,2,3,4,5]

toList : Zipper a -> List a

  convert this Zipper to a list

      toList $ fromList[1,2,3,4,5]