OCaml firmas de tipo explícitas
En Haskell, se considera una buena práctica declarar explícitamente la firma de tipo de sus funciones, aunque (generalmente) se pueda inferir. Parece que esto ni siquiera es posible en OCaml, por ejemplo,
val add : int -> int -> int ;;
Me da un error. (Aunque puedo hacer type
módulos que dan solo firmas.)
- ¿Estoy en lo cierto en que esto no es posible hacer en OCaml?
- Si es así, ¿por qué? El sistema de tipos de OCaml no parece tan increíblemente diferente de Haskell.
2 answers
OCaml tiene dos formas de especificar los tipos, que se pueden hacer en línea:
let intEq (x : int) (y : int) : bool = ...
O se pueden colocar en un archivo de interfaz, como usted ha hecho:
val intEq : int -> int -> bool
Creo que este último es el preferido, ya que separa más limpiamente la especificación (tipo) de la implementación (código).
Referencias: OCaml para Haskelers
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-05-14 22:52:06
En general, la sintaxis para let
-enlazar 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