Zaletą tego jest że algorytm inferencji jest prosty i efektywny, wadą natomiast jest czasem użycie, gdzieniegdzie, pomocniczych funkcji – co w praktyce nie jest problemem i kod w OCamlu zazwyczaj i tak jest bardziej zwięzły niż w innych językach.
Inne języki funkcyjne, jak Haskell, posiadają mechanizm przeciążania przez tzw. type classes – które pełnią podobne role jak moduły i funktory w OCamlu. Umożliwia to inferencje typów wraz z udogodnieniami przeciążania, z umiarkowaną ceną dodatkowych adnotacji sygnatur funkcji.
Własnością bazowego system typów jest brak wymogu jakichkolwiek adnotacji. Adnotacje natomiast występują w celu generacji dokumentacji przez ocamldoc bądź przy bardziej zaawansowanych użyciach systemu wychodzącego poza pierwotny system typów ML, jak funktory, obiekty, moduły opakowane, polimorficzna rekursja czy GADTs.
Składnia Syntaktycznie bazowy język OCaml ma bardzo prostą, zwięzłą, ale zarazem bardzo praktyczną składnie składającą się z następujących komponentów:
definicje typów definicje wartości definicje modułów deklaracje typów i wartości w sygnaturach modułów adnotacje typów
oprócz tego występują między innymi elementy jak:
komentarze między (* i *) które mogą być zagnieżdżone stałe stringów które mogą być kilkuliniowe stałe list stałe tablic