Augmented sequence deletion

David Feuer david.feuer at gmail.com
Sun Dec 29 00:32:28 UTC 2019


That approach works great for maps and sets, but not so well for sequences.
If a sequence has ten elements, then you can't really insert a twentieth
one.

On Sat, Dec 28, 2019, 7:25 PM Andreas Abel <andreas.abel at ifi.lmu.de> wrote:

> 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
> >
> _______________________________________________
> Libraries mailing list
> Libraries at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/libraries/attachments/20191228/9f218a46/attachment.html>


More information about the Libraries mailing list