Una introducción a cómo empezar desde cero con OCaml
Exercism ofrece ejercicios y comentarios, pero puede resultar difícil de abordar para quienes aprenden OCaml por primera vez. Estos recursos pueden ayudarte a empezar:
La documentación de OCaml está repartida entre varios proyectos y puede ser difícil de encontrar, porque existe lo que a veces se denomina la biblioteca estándar (la biblioteca más bien minimalista que viene con el compilador) y una biblioteca Core (un proyecto aparte de Jane Street que pretende ofrecer una biblioteca estándar más completa y coherente).
Lo que resulta confuso es que a la biblioteca estándar a veces se la llama «biblioteca core» (aunque rara vez «biblioteca Core»).
La biblioteca Core de Jane Street es necesaria para algunos ejercicios, pero puede ser útil para todos. Se divide en tres, Base, Core_kernel y Core, y cada una amplía la anterior.
Base es todo lo que necesitarás para la mayoría de los ejercicios, pero para algunos (al trabajar con fechas, por ejemplo, se necesita Core_kernel).
Para usar Core, pon open Base o open Core_kernel al principio de tu código.
Por ejemplo, en lugar de List obtienes una versión de Base que la eclipsa.(https://ocaml.janestreet.com/ocaml-core/latest/doc/base/Base/List/) (open Base hace que esté disponible con el nombre List).
Hay algunas diferencias sutiles y no tan sutiles entre el módulo List de la biblioteca estándar y el List de Core; por ejemplo, en la biblioteca estándar List.for_all tiene esta firma
val for_all : ('a -> bool) -> 'a list -> bool
mientras que en la biblioteca Core tiene esta otra
val for_all : 'a t -> f:('a -> bool) -> bool
La consecuencia es que, para comprobar si todos los números de una lista son menores que 10, con el módulo List del núcleo del compilador tienes que escribir lo siguiente:
List.for_all (fun x -> x < 10) list
y con el módulo List de Core tienes que escribir:
List.for_all list (fun x -> x < 10)
o (preferiblemente):
List.for_all ~f:(fun x -> x < 10) list
Un consejo: céntrate en la biblioteca Core e ignora la biblioteca estándar, a menos que de verdad no encuentres lo que necesitas en Core.