Typeclass names could be made redundant in Haskell. If one could state a constraint in terms of a typeclass member, things would be more simple.
E.g., "classOf fmap" as a synonym for Functor.
E.g., "classOf fmap" as a synonym for Functor.
class (HasMap f) <= Functor f
class (Functor f, HasApply f) <= Apply f
class (Apply f, HasPure f) <= Applicative f
class (Apply m, HasChain m) <= Bind m
class (Applicative m, Bind m) <= Monad m
[1]: https://github.com/tfausak/purescript-neon/blob/v0.5.4/src/N...
[2]: https://pursuit.purescript.org/packages/purescript-prelude/1...