Como aprender OCaml

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


O Exercism oferece exercícios e feedback, mas pode ser difícil começar para quem está aprendendo OCaml pela primeira vez. Estes recursos podem ajudar você a dar os primeiros passos:

A documentação do OCaml está espalhada 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 um tanto minimalista que vem com o compilador) e uma biblioteca Core (um projeto separado da Jane Street que busca oferecer uma biblioteca padrão mais completa e consistente).

Para confundir, a biblioteca padrão às vezes é chamada de core library (embora raramente de Core library).

A biblioteca Core, da Jane Street, é necessária para alguns exercícios, mas pode ser útil para todos. Ela é dividida em três: Base, Core_kernel e Core, cada uma estendendo a anterior. Para a maioria dos exercícios, a Base é tudo o que você vai precisar, mas em alguns (usando datas, por exemplo) a Core_kernel é necessária. Para usar a Core, coloque open Base ou open Core_kernel no topo do seu código.

Por exemplo, em vez de List você tem uma sombra de Base.(https://ocaml.janestreet.com/ocaml-core/latest/doc/base/Base/List/) (open Base deixa isso disponível com o nome List).

Existem algumas diferenças sutis, e outras nem tanto, 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 na biblioteca Core ela 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, com o módulo List que vem com o compilador você precisa escrever o seguinte:

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

e com o módulo List da Core você precisa escrever:

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

ou (de preferência):

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

Uma dica: foque na biblioteca Core e ignore a biblioteca padrão, a menos que você realmente não encontre o que precisa na Core.