言い方が悪かったかな。
 # let id : 'a -> 'a = fun x -> x ;;
 val id : 'a -> 'a = <fun>
 # (id 123, id "abc") ;;
 - : int * string = 123, "abc"
はエラーにならないのに、
 # (fun (id : 'a -> 'a ) -> (id 123, id "abc"))
  (fun x -> x) ;;
はエラーになる理由を述べよ、って言えば良かったのかも。
意味的には
 let x = 式1 in 式2
と
 (fun x -> 式2) 式1
は同じだけど、MLの型システムでは扱いが違う。で、「どう違うのか?」と。