Adding to the runtime options, I have been happy using TypeCheck (Guide/Readme — TypeCheck v0.13.7). The specs are written nearly the same as regular typespecs, so it feels familiar.
Beyond that, heavy use of function head pattern-matching and guards can get you a long way in enforcing correctness.






















