A generic function keeps a relationship between values. If you give a helper a list of departure records, its result should still be a departure record, with the same fields available to callers. Replacing that relationship with any hides mistakes until the program runs. A constraint adds only the capability the implementation needs, such as an id field; it doesn't throw away the other fields.
You will build small collection helpers and call them through ordinary input wrappers. The runtime checks verify ordering, missing values, and empty collections. Compiler checks also call your helpers with different types and reject invalid keys or records. An empty string and zero are valid values. Don't lose them by using a truthiness fallback.