Proposal: add ordNub somewhere in containers

Henning Thielemann lemming at
Tue Oct 17 09:54:53 UTC 2017

On Tue, 17 Oct 2017, Henning Thielemann wrote:

> ordNub could be implemented using Traversable:
>   catMaybes (traverse ??? xs :: [Maybe a])
> You would only need a generalization for catMaybes like mfilter.

ordNub :: (Traversable f, MonadPlus f, Ord a) => f a -> f a
ordNub =
    join . snd .
       (\s x ->
          if Set.member x s
            then (s,mzero)
            else (Set.insert x s, return x))

We don't need mplus, only Monad and mzero.

More information about the Libraries mailing list