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
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
More information about the Libraries
mailing list