Discussion: Allow custom constraint for elem in Foldable

Eric Mertens emertens at gmail.com
Thu Jul 27 23:35:13 UTC 2017


I would prefer to see designs for something like this explored in a separate package before we worried about changing base’s Foldable class.

> On Jul 27, 2017, at 3:45 PM, David Feuer <david.feuer at gmail.com> wrote:
> 
> The Foldable class offers the method
> 
>  elem :: Eq a => a -> t a -> Bool
> 
> Unfortunately, this is really awful for sets, hash maps, etc. See
> https://stackoverflow.com/questions/45361801/implement-an-olog-n-foldable-elem-for-binary-search-trees-in-haskell#45362110
> for an example. We could fix it, kinda:
> 
> class Foldable t where
>  type ElemConstr t :: * -> Constraint
>  type ElemConstr t = Eq
> 
>  elem :: ElemConstr t a => a -> t a -> Bool
>  default elem :: (ElemConstr t ~ Eq, Eq a) => a -> t a -> Bool
> 
> One might legitimately complain that such a wild type is ad hoc, but
> one might counter that complaint by saying that most of Foldable is
> already ad hoc.
> 
> David
> _______________________________________________
> Libraries mailing list
> Libraries at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries



More information about the Libraries mailing list