Hi Joachim,

On Wed, Feb 17, 2016 at 10:32 AM, Joachim Breitner wrote:
Am Dienstag, den 16.02.2016, 23:02 -0800 schrieb M Farkas-Dyck:
> I quietly posted this library to Hackage nearly a year ago, but lately
> learned that some seeking such a package had difficulty finding it, so
> i announce it now ☺
>
> https://hackage.haskell.org/package/filtrable
>
> class Functor f => Filtrable f where
>     mapMaybe :: (a -> Maybe b) -> f a -> f b
>     catMaybes :: f (Maybe a) -> f a
>     filter :: (a -> Bool) -> f a -> f a
>
> For laws, see docs on Hackage.

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

which would fix the behavior quite tightly.

Why would you specify laws for Filtrable w.r.t. Foldable, when Foldable is not part of the definition?

There is at least one potential application for Filtrable for a type that isn't a Foldable:

  https://github.com/reflex-frp/reflex/pull/44

Regards,
Sean