Could you explain me why this program does typecheck
let rec plop1 : 'a 'b 'c. 'a -> 'b * 'c = fun x -> (fst (plop1 ""), snd (plop1 1))
while this one does not?
let rec plop2 (type a b c) (x : a) : b * c = (fst (plop2 ""), snd (plop2 1))
I already read definition of locally abstract type in the OCaml manual; What is the difference between 'a.
and type a.
and when to use each?; and What is the difference between type variables and locally abstract types?, but they are not clear enough for me.