úÎ*º)S     empty is an empty zipper  fromList xs1 returns a zipper containing the elements of xs,  focused on the first element. fromListEnd xs1 returns a zipper containing the elements of xs, - focused just off the right end of the list. beginp z returns True if the zipper is at the start. endp z returns True if the zipper is at the end.  It is not safe to call cursor on z if endp z returns True. emptyp z returns True$ if the zipper is completely empty.  forall z. emptyp z == beginp z && endp z cursor z! returns the targeted element in z. 6This function is not total, but the invariant is that  endp z == False means that you can safely call  cursor z.  safeCursor is like cursor but total. left z# returns the zipper with the focus  shifted left one element. right z# returns the zipper with the focus . shifted right one element; this can move the  cursor off the end.  insert x z adds x at the cursor. delete z- removes the element at the cursor (if any). " Safe to call on an empty zipper. & forall x z. delete (insert x z) == z push x z) inserts x into the zipper, and advances  the cursor past it. pop z1 removes the element before the cursor (if any). " Safe to call on an empty zipper. ! forall x z. pop (push x z) == z  replace a z+ changes the current element in the zipper : to the passed in value. If there is no current element, : the zipper is unchanged. If you want to add the element  in that case instead, use insert a (delete z).  reversez z) returns the zipper with the elements in 7 the reverse order. O(1). The cursor is moved to the 6 previous element, so if the cursor was at the start,  it'/s now off the right end, and if it was off the  right end, it')s now at the start of the reversed list. foldrz f x zip calls f with the zipper focused on 3 each element in order, starting with the current. + You are guaranteed that f can safely call cursor on  its argument; the zipper won't be at the end. foldlz f x zip$ calls f with the zipper focused on 3 each element in order, starting with the current. + You are guaranteed that f can safely call cursor on  its argument; the zipper won't be at the end. foldlz'% is foldlz with a strict accumulator extractz, extendz, and  duplicatez can be used to > implement Copointed and Comonad from category-extras. I didn't < add the instances here so as not to introduce a dependency  on that package.         ListZipper-1.2.0.0Data.List.ZipperZipperZipemptyfromList fromListEndtoListbeginpendpemptypstartendcursor safeCursorleftrightinsertdeletepushpopreplacereversezfoldrzfoldlzfoldlz'extractz duplicatezextendz