Motivation Frequently, we deal with data types that are overly broad or encompass more values than required for our particular field.
Sometimes, we may need to distinguish between two values that appear equivalent at the type level. An email address, for instance, is merely a String, yet it needs certain limitations…