`check` with predicate functions and registered constructors.

Allows predicates to be used as a match pattern, making `Match.Where`
unnecessary; while constructors can still be used by registering them
as constructors.