Augmented sequence deletion

Andreas Abel andreas.abel at ifi.lmu.de
Sun Dec 29 00:25:14 UTC 2019


I'd advocate a Swiss army knife like

   atM
     :: Applicative m
     => Int
     -> (Maybe a -> m (Maybe a))
     -> Seq a -> m (Seq a)

Then you can get your deleteLookup function by a suitable instance of 
the effect m.

Nothing stands for "index does not point to any element", "Just a" means 
the index points to value a.

On 2019-12-28 20:24, David Feuer wrote:
> 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?
> _______________________________________________
> Libraries mailing list
> Libraries at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
> 


More information about the Libraries mailing list