Augmented sequence deletion
David Feuer
david.feuer at gmail.com
Sat Dec 28 19:24:58 UTC 2019
Data.Sequence offers
deleteAt :: Int -> Seq a -> Seq a
which deletes the element at the given index. Today, I ran into a
situation where I wanted to know what was deleted.
deleteLookup :: Int -> Seq a -> Maybe (a, Seq a)
The closest thing I can find in `containers` is in Data.Map:
updateLookupWithKey :: Ord k => (k -> a -> Maybe a) -> k -> Map k a
-> (Maybe a,Map k a)
Unfortunately, that function is ugly and strange. A better one, whose
name I can't guess at the moment:
flabbergast :: (a -> (b, Maybe a)) -> Int -> Seq a -> Maybe (b, Seq a)
where a Nothing result means the index was out of bounds. There's also
a potential
flabbergastF :: Functor f => (a -> f (Maybe a)) -> Int -> Seq a ->
Maybe (f (Seq a))
I'm not sure if flabbergast can be made as fast as deleteLookup, so
it's possible we may want both. Any opinions?
More information about the Libraries
mailing list