Encontré algo que realmente no entiendo al trabajar en un proyecto ocaml
.programación modular en ocaml
Supongamos que estoy utilizando los módulos Array
y List
de la biblioteca estándar OCaml. Ambos implementan la función length
pero tienen diferentes tipos. En el módulo List
, este es su tipo:
length: a' list -> int
Y en el módulo Array
, tiene el tipo:
length: a' array -> int
Pero entonces yo quería utiliza los dos módulos en el mismo módulo que estaba implementar, a través de la open
palabra clave:
open List
open Array
Cuando traté de usar la función length
en una lista, tuve un error de tipo durante la compilación.
Dado que OCaml es un lenguaje fuertemente tipado estáticamente, me pregunto por qué el compilador no sabía que quería la función de longitud del módulo de lista ya que declaraba que estaba usando ambos.
"Me pregunto por qué el compilador no sabía que quería la función de longitud del módulo de lista ya que declaré que estaba utilizando tanto" Sí, pero ¿cuál sería el tipo de 'diversión s -> longitud s' en este contexto entonces? –
Según la respuesta de jrouquie, será 'a 'array -> int' –
Exactamente, pero en el caso de un compilador OCaml hipotético que intentó adivinar, no habría ningún tipo más general en el sistema de tipo OCaml para la función. Puede que le interese la solución de Haskell a esta molestia, escriba las clases: http://www.haskell.org/tutorial/classes.html –