LHasLength : Nat -> List a -> Type
data HasLength : Nat -> SnocList a -> Type
hasLength : HasLength n sx -> length sx = n
map : (f : (a -> b)) -> HasLength n xs -> HasLength n (map f xs)
sucL : HasLength n sx -> HasLength (S n) ([<x] ++ sx)
sucR : HasLength n sx -> HasLength (S n) (sx ++ [<x])
hlAppend : HasLength m sx -> HasLength n sy -> HasLength (n + m) (sx ++ sy)
hlFish : HasLength m sx -> LHasLength n ys -> HasLength (n + m) (sx <>< ys)
mkHasLength : (sx : SnocList a) -> HasLength (length sx) sx
hlChips : HasLength m sx -> LHasLength n ys -> LHasLength (m + n) (sx <>> ys)
cast : (0 _ : length sx = length sy) -> HasLength m sx -> HasLength m sy
hlReverse : HasLength m acc -> HasLength m (reverse acc)