module Data.SnocList import Prelude snoclen : ∀ a. SnocList a → Nat snoclen {a} xs = go xs Z where go : SnocList a → Nat → Nat go Lin acc = acc go (xs :< x) acc = go xs (S acc) snocelem : ∀ a. {{Eq a}} → a → SnocList a → Bool snocelem a Lin = False snocelem a (xs :< x) = if a == x then True else snocelem a xs snocGetAt : ∀ a. Nat → SnocList a → Maybe a snocGetAt _ Lin = Nothing snocGetAt Z (xs :< x) = Just x snocGetAt (S k) (xs :< x) = snocGetAt k xs snocGetAt' : ∀ a. Int → SnocList a → Maybe a snocGetAt' ix xs = snocGetAt (cast ix) xs