Give Compose
's instances explicit kind signatures
#607
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Previously, the promoted versions of certain
Compose
instances (Functor
,Foldable
, etc.) would be overly general due to the fact thatsingletons-th
omits instance contexts during promotion. For example, the promotedFunctor
instance forCompose
was:But this was too general, as
f
andg
should both be of kindType -> Type
instead. The defunctionalization symbols associated with the instances also had a similar problem.This patch annotates each instance with an explicit kind (e.g.,
Functor (Compose (f :: Type -> Type) g)
to ensure that the promoted instances also have the intended kind. This is very much in the same spirit as the situation described inNote [Using standalone kind signatures not present in the base library]
inControl.Monad.Singletons.Internal
, but for instance declarations instead of class declarations.Resolves the "Overly polymorphic instance methods" section of #601.