This function is intended to be invoked explicitly, the implicit modifiers are simply because the compiler can infer this in many cases.
This function is intended to be invoked explicitly, the implicit modifiers are simply because the compiler can infer this in many cases. For example:
implicit def eitherMonad[A]: Monad[Either[A, ?]] = ???
implicitly[∀[α => Monad[Either[α, ?]]]]
The above will work.
This is the implicit version of apply, but restructured and encoded such that the F is unconstrained in in arity or fixity.