Deklaracje typów deklaracja typów przez słowo kluczowe type – w przeciwieństwie do Standard ML, OCaml nie ma rozróżnienia między deklaracjami nowych typów a algebraicznymi typami (przez datatype w SML), przykłady:

(* Aliasy typu *) type numer = int type para = string * int type lista_int = int list (* Rekord *) type punkt = { x : float; y : float } (* Rekord polimorficzny *) type ('a, 'b) nazwana_para = { first : 'a; second : 'b } (* Warianty, czy alternatywy (polimorficzne) *) type 'a drzewo = Drzewo of 'a drzewo * 'a drzewo | Lisc of 'a (* Typ abstrakcyjny *) type abstrakcyjny Jak widać typy mogą być polimorficzne, czyli mogą być parametryzowane przez inny typ poprzez zmienne typu (jak w przykładzie 'a albo 'b). Zmienna typu zostanie podstawiona automatycznie przez inferencje typów.

Definicje wartości Wartości są definiowane przez konstrukcje let która nadaje nazwę wartości czyniąc ją zmienną. (* Globalna wartosc *) let numer = 42 (* Definicje tej samej funkcji *) let dodaj x y = x + y let dodaj = fun x y -> x + y let dodaj = fun x -> fun y -> x + y (* Bardziej skomplikowana funkcja, zmienne lokalne *) let pitagoras p1 p2 = let roznica = { x = p2.x - p1.x;