Discussion: Allow custom constraint for elem in Foldable

David Feuer david.feuer at gmail.com
Thu Jul 27 22:45:40 UTC 2017

The Foldable class offers the method

  elem :: Eq a => a -> t a -> Bool

Unfortunately, this is really awful for sets, hash maps, etc. See
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.


More information about the Libraries mailing list