I wrote a typed SQL interface where the usage is something like: let sql = TS.(sql / "SELECT foo FROM bar WHERE x =" /% Var.int /^ "AND" /% Var.string) And then one can gets a value back of type: (int -> string -> '_weak4, '_weak4) Sqlite_io.Typed_sql.t And the type of all of that is: type ('f, 'r) t val sql : ('r, 'r) t val (/^) : ('f, 'r) t -> string -> ('f, 'r) t val (/%) : ('f, 'a -> 'r) t -> 'a Var.t -> ('f, 'r) t My question is: How is the type of 'f inferred in there? I managed to get this working by cobbling together a bunch of things I didn't quite understand and now I'm trying to figure it out. Thanks, /Malcolm