Predicate provides type-safe predicate functions and refinements for runtime type checking.
Overview
APredicate<A> is a function that takes a value of type A and returns a boolean.
A Refinement<A, B> is a special predicate that narrows the type from A to B.