syntax - OCaml firmas de tipo explícito
types type-inference (2)
En Haskell, se considera una buena práctica declarar explícitamente el tipo de firma de sus funciones, aunque se puede inferir (generalmente). Parece que esto no es posible en OCaml, por ejemplo
val add : int -> int -> int ;;
me da un error (Aunque puedo hacer módulos de type
que solo dan firmas).
- ¿Tengo razón en que esto no es posible hacer en OCaml?
- Si es así, ¿por qué? El sistema de tipos de OCaml no parece ser tan diferente de Haskell.
En general, la sintaxis para let
-bindar un valor con un tipo restringido es:
let val : constraint = e ...
Aplicado a una función, puede especificar la firma de la siguiente manera:
let add : int -> int -> int = fun x y -> ...
Esto es análogo a la sintaxis requerida para restringir un módulo a una firma:
module Mod
: sig ... end
= struct ... end
OCaml tiene dos formas de especificar tipos, se pueden hacer en línea:
let intEq (x : int) (y : int) : bool = ...
o se pueden colocar en un archivo de interfaz, como lo ha hecho:
val intEq : int -> int -> bool
Creo que se prefiere lo último, ya que separa más claramente la especificación (tipo) de la implementación (código).
Referencias : OCaml para Haskellers