syntax types ocaml type-inference

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).

  1. ¿Tengo razón en que esto no es posible hacer en OCaml?
  2. 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