La forma tradicional de obtener el valor dentro de cualquier tipo de constructor en OCaml es con la coincidencia de patrones. La coincidencia de patrones es la parte de OCaml que puede ser más diferente de lo que ya has visto en otros idiomas, por lo que te recomendaría que no solo escribas programas de la forma en que estás acostumbrado (por ejemplo eludir el problema con ocaml-lib) pero en su lugar pruébalo y mira si te gusta.
let contents =
match z with
Some c -> c;;
variable contents
se asigna 3
, pero se obtiene una advertencia:
Advertencia 8: este patrón de coincidencia no es exhaustiva. Este es un ejemplo de un valor que no es igualada: Ninguno
En el caso general, no se sabe que la expresión que desea buscar en el interior es necesariamente una Some c
. La razón por la que se eligió un tipo de opción es que a veces ese valor puede ser None
. Aquí el compilador te recuerda que no estás manejando uno de los posibles casos.
Puede hacer coincidir patrones "en profundidad" y el compilador aún comprobará la exhaustividad. Considere esta función que toma un (int option) option
:
let f x =
match x with
Some (Some c) -> c
| None -> 0
;;
Aquí se le olvidó el caso Some (None)
y el compilador se lo indique:
Advertencia 8: este patrón de coincidencia no es exhaustiva. Aquí hay un ejemplo de un valor que no se corresponde: Algunos Ninguno
Está buscando en la documentación de ocaml-lib, una biblioteca de utilidad opcional para OCaml. Por supuesto, no necesita esa biblioteca para acceder al valor dentro de un constructor 'Some'. –