Подтвердить что ты не робот

Ячейки типа OCaml с явным типом

В Haskell считается хорошей практикой явно объявлять сигнатуру типа ваших функций, даже если она может (обычно) быть выведена. Кажется, что это невозможно даже в OCaml, например.

val add : int -> int -> int ;;

дает мне ошибку. (Хотя я могу сделать модули type, которые дают только подписи.)

  • Правильно ли, что это невозможно сделать в OCaml?
  • Если да, то почему? Система типов OCaml не кажется невероятно отличной от Haskell.
4b9b3361

Ответ 1

OCaml имеет два способа указания типов, их можно сделать inline:

let intEq (x : int) (y : int) : bool = ...

или они могут быть помещены в файл интерфейса, как вы это делали:

val intEq : int -> int -> bool

Я считаю, что последнее предпочтительнее, поскольку оно более четко отделяет спецификацию (тип) от реализации (кода).


Ссылки: OCaml для Haskellers

Ответ 2

Im general, синтаксис let - привязать значение с ограниченным типом:

let val : constraint = e ...

Применительно к функции вы можете указать подпись следующим образом:

let add : int -> int -> int = fun x y -> ...

Это аналогично синтаксису, требуемому для ограничения модуля сигнатурой:

module Mod
  : sig    ... end
  = struct ... end