Como aprender OCaml

Uma visão geral de como começar do zero com OCaml


O Exercism disponibiliza exercícios e feedback, mas pode ser difícil de começar para quem está a aprender OCaml pela primeira vez. Estes recursos ajudam-te a dar os primeiros passos:

A documentação do OCaml está repartida por vários projetos e pode ser difícil de encontrar, porque existe o que às vezes se chama de biblioteca padrão (a biblioteca bastante minimalista que vem com o compilador) e uma biblioteca Core (um projeto separado da Jane Street que pretende oferecer uma biblioteca padrão mais completa e consistente).

Para complicar, a biblioteca padrão é por vezes designada biblioteca core (embora raramente biblioteca Core).

A biblioteca Core da Jane Street é necessária para alguns exercícios, mas pode ser útil para todos. Está dividida em três, Base, Core_kernel e Core, cada uma a estender a anterior. A Base é tudo o que precisas para a maioria dos exercícios, mas para alguns (por exemplo, ao usar datas, é preciso a Core_kernel). Para usar a Core, coloca open Base ou open Core_kernel no topo do teu código.

Por exemplo, em vez de List, obténs um List alternativo vindo do Base.(https://ocaml.janestreet.com/ocaml-core/latest/doc/base/Base/List/) (open Base torna-o disponível com o nome List).

Há diferenças subtis e nem tão subtis assim entre o módulo List da biblioteca padrão e o List da Core. Por exemplo, na biblioteca padrão, List.for_all tem a assinatura

val for_all : ('a -> bool) -> 'a list -> bool

enquanto que na biblioteca Core tem

val for_all : 'a t -> f:('a -> bool) -> bool

A consequência é que, para verificar se todos os números de uma lista são menores que 10, tens de escrever o seguinte com o módulo List da biblioteca core do compilador:

List.for_all (fun x -> x < 10) list

e com o módulo List da Core tens de escrever:

List.for_all list (fun x -> x < 10)

ou (de preferência):

List.for_all ~f:(fun x -> x < 10) list

Um conselho: concentra-te na biblioteca Core e ignora a biblioteca padrão, a menos que não consigas mesmo encontrar na Core o que precisas.