#OCaml tip: when you function takes several arguments of the same type (e.g. two booleans), or even generic types (e.g. 'a and 'b) that in practice would be non-disjoint in callers, use labeled arguments. This way, you'll avoid bugs due to inadvertently mixing up arguments.
Do you also avoid numbers without dimensions, integers without explicit lower and upper bounds, floating-point numbers without explicit precision requirements, data without provenance information, etc. ?
Read my blog!