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





result - это не модификатор, а тип, требующий двух переменных типа. Его определение немного упрощен:
type ('a, 'e) result =
| Ok of 'a
| Error of 'e
Таким образом, первая переменная типа определяет тип аргумента конструктора Ok, а вторая - тип аргумента конструктора Error.
Вам может показаться обратным, что аргументы предшествуют типу, к которому они применяются, но такой способ имеет некоторые преимущества. Во-первых, int list читает лучше, чем list int, а во-вторых, вы можете записать int list list вместо list (list int), как если бы вы решили следовать синтаксису обычного функционального приложения.
Вы, вероятно, также заметили разницу между синтаксисом типы кортежей и значения кортежа. result принимает значение кортежа, содержащий два типы, первый тип в этом случае является кортежем.
Надеюсь, это проясняет вам ситуацию.
Связанный: stackoverflow.com/q/14291326/124319