`check` with predicate functions and registered constructors.

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