I have two functions of the following types:
f1 : (formatter -> 'a -> unit) -> formatter -> (('a * int list) * 'a clause) list -> unit
f2 : 'a -> 'b -> unit.
f1 is a pretty printer that admits a second function to do some additional printing. In this case
f2 is really a null function (
let f2 _ _ = ()). But partial application
f1 f2 produces weak types. Even if I manually annotate the result, the type inferencer insists that the composed type is:
formatter -> (('_a * int list) * '_a clause) list -> unit
What may be the likely cause of this? I am on OCaml 4.10.2.