Le typage manuel est tout à fait possible en caml hein Pollux ^^
au lieu de let id x = x, tu peux écrire let id (x:int) = x, auquel cas tu obtiens une fonction de type int -> int au lieu de 'a -> 'a
et tu peux aussi forcer le type de ta fonction (auquel cas si jamais tu te goures dedans ça refusera de compiler au lieu de te donner un type qui n'est pas celui que tu voulais, ceci dit ce dernier cas est en général très facile à détecter, soit en balançant ta fonction dans le toplevel juste après l'avoir écrite, pratique recommandée ^^, et constatant qu'elle n'a pas le bon type, soit, même si tu le fais pas, à l'utilisation de la fonction très vraisemblablement... mais si tu préfères forcer, rien ne t'en empêche

)
Euh sinon, c'est quoi les contraintes dont tu parles

Le typage auto « rajoute tellement de contraintes sur le langage... »

Là je ne vois pas *du tout* de quoi il peut bien s'agir