move Typeable
constraint on predicate kind to class
#98
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.
An earlier change #83 enabled using non-
Type
-kinded predicates. To support this,Predicate (p :: k) x
instances were changed to explicitly include aTypeable k
constraint. Every instance that wishes to support non-Type
-kinded predicates (e.g. further predicate operators likeAnd
,Not
) must add this constraint.This PR moves the
Typeable k
constraint to the class definition. (Note thatTypeable p
was already present.) We remove lots of newly spuriousTypeable
constraints. We also fix an oversight in the instances for binary predicate operators, where the kind of predicatesl
andr
were arbitrarily required to be the same kindk
. Thanks to this change, we can remove the explicit kind quantifying and let GHC correctly inferl :: k1
,r :: k2
.Due to GHC's rules on inferring type variable order,
validate
becomes awkward to use with TypeApplications.validate'
provides original behaviour. Potential discussion there.This might break certain custom predicate operator instances, but I'm not sure.