What a type name promises

Prefer the domain word

String describes storage. Slug, RepositoryUrl, and PublishedDate describe roles. A newtype is worthwhile when the role carries an invariant or prevents two identical representations from being confused.

It is less useful when it only moves getters and constructors around without removing decisions from callers.

Read the signatures together

One function signature can look reasonable in isolation. A module's full set of signatures reveals whether its vocabulary is coherent or whether the same idea appears under several names.

Thanks for reading. If this sparked an idea, keep it moving. Browse the archive.