Aller, une brève très brève,

faites ceci :

let a =  Sys.argv.(0) in
Printf.printf a    ;;

On obtient :

This expression has type string list but is here used with type
  (‘a, out_channel, unit) format list
Type string is not compatible with type
  (‘a, out_channel, unit) format =
    (‘a, out_channel, unit, unit, unit, unit) format6

mais :

let a =  Sys.argv.(0) in
Printf.printf “%s” a;;

C’est ok …

Voila comment passer 20 minutes sur une connerie.

Dans la série des subtilités :
 
let buffer = ” “  and retour = ref “” in
    while (ThreadUnix.read socket buffer 0 1 > 0) do
      Printf.printf “>%s\n” buffer ; flush stdout ;

marche…

Mais pas cela :

let buffer = “”  and retour = ref “” in
    while (ThreadUnix.read socket buffer 0 1 > 0) do
      Printf.printf “>%s\n” buffer ; flush stdout ;

Alors vous avez trouvé ?

Certes, ça s’expliquent, mais tout de même …