Typed Racket's refinement types are useful. We should implement something similar.
This really went nowhere - the issues with purity around refinement types are pretty odd (basically two invocations of a refined predicate must evaluate to the same value, ie. be pure functions, because they have the same object) and probably not something we want.
Looking to the future, perhaps we want upcoming newtype in Typed Racket.