dry-types provides flexible type system for Ruby with coercions and constraints.