Что делает следующая строка OCaml: type reply = (string * string list * string, error_t) result ;;? - PullRequest
0 голосов
/ 22 октября 2018
type reply = (string * string list * string, error_t) result;;

Я новичок в OCaml, и я пытался прочитать некоторые из библиотеки Core, когда натолкнулся на приведенный выше код.Я не могу понять, что он делает.Кажется, создается кортеж string * string list * string внутри другого кортежа с error_t.Я не совсем понимаю, что делает модификатор result в конце.

1 Ответ

0 голосов
/ 22 октября 2018

result не модификатор, а тип, требующий двух переменных типа.Его определение немного упрощено:

type ('a, 'e) result =
  | Ok of 'a
  | Error of 'e

Таким образом, переменная первого типа задает тип аргумента для конструктора Ok, а вторая - тип аргумента дляконструктор Error.

Вам может показаться задом наперед, что аргументы предшествуют типу, к которому они применяются, но выполнение этого таким образом имеет некоторые преимущества.Во-первых, int list читается лучше, чем list int, а во-вторых, вы можете написать int list list вместо list (list int), как если бы вы решили следовать синтаксису обычного приложения функции.

Вы, вероятно, такжеобратите внимание, что существует разница между синтаксисом для типов кортежей и значений кортежей .result принимает значение кортежа , содержащее два типа , первый тип в данном случае - кортеж.

Надеюсь, это прояснит его для вас.

...