[Haskell-cafe] [announcement] filtrable: class of filtrable containers

M Farkas-Dyck m.farkasdyck at gmail.com
Wed Feb 17 17:16:01 UTC 2016

On 17/02/2016, Joachim Breitner <mail at joachim-breitner.de> wrote:
> You might want to add laws in the style of
>     If this is also a Foldable, then
>        toList . mapMaybe f = mapMapybe f . toList
>        toList . catMaybes = catMaybes . toList
>        toList . filter f = filter f . toList

Shall do.

> Do you plan to add instances for all the other data structures in base
> that are filtrable?

Yes, if i missed any, please let me know which ☺

On 17/02/2016, Oleg Grenrus <oleg.grenrus at iki.fi> wrote:
> - I’d also like to see instances for types in containers,
> unordered-containers, vector and semigroup.

I was hoping to have no deps but base... alas, Cabal and Hackage seem
to have no good way to have instance deps, so the instances must be in
either the package defining the class or the one defining the types
which are instances of it.

> If you don’t mind I can make a PR for the instances.

Feel free to do so for containers and vector at least. I may want this
to not transitively depend on unordered-containers → hashable → text,
but if enough potential users want these instances i'll include them
(containers and vector come with GHC so it's not so bad). What types
in semigroups would you add instances of?

> - The OtherLicense seems a bit scary (even the contents aren’t),
>   is there a good reason why you don’t use more familiar MIT or BSD3?

Too verbose. I might use ISC if it weren't also an OtherLicense...

> The law:
>     filter f = mapMaybe (liftA2 (<$) id (guard ∘ f))
> is very hard to understand.


On 17/02/2016, Simon Jakobi <simon.jakobi at googlemail.com> wrote:
> your package looks very similar to
> http://hackage.haskell.org/package/witherable!

Witherable has Traversable superclass, but some Filtrable types may
not be Traversable.

More information about the Haskell-Cafe mailing list