Этот тип abc
является синонимом для bool -> int
, а не нового типа. Поскольку он не является новым типом, OCaml уже может вывести тип для вас. Причина объявления такого типа заключается в документации.
Итак, лучший ответ на ваш вопрос заключается в том, что вы должны использовать abc
, если хотите документировать тип чего-то.
type abc = bool -> int
let apply (f: abc) (b: bool) : int =
f b
let myfun : abc = fun b -> if b then 3 else 4
В вашем другом примере color
представляет собой новый тип. Если бы вы не объявили об этом, это не было бы.
(Обратите внимание, что имена типов в OCaml должны начинаться со строчной буквы. Вы не можете иметь тип по имени Color
.)
Update
Вы должны различать имена типа (например color
и int
) и конструкторы (например, Red
и Dark
и 412). Вы не можете сопоставлять соответствие именам типов. Вы можете сопоставить соответствие по значениям (например, Red
или Dark Red
или 412). У вашего типа abc
нет конструкторов. Это синоним.
Это также верно, поскольку @melpomene указывает, что для значений функций не существует равенства. Таким образом, вы не можете сопоставлять значения функций.
Это странный вопрос. Обычно вы начинаете с проблемы и пишете код, чтобы решить эту проблему. Вы не записываете случайный код, а затем «хорошо, как я могу это использовать сейчас?». – melpomene
Я использую аналогичное отображение в своей функции, но я не могу раскрывать этот код здесь. И я застрял здесь, я не знаю, как использовать это определение типа отображения. :( –
Обычный термин для этого «сопоставления» - это «функция». 'Bool -> int' - это тип функций, которые берут' bool' и возвращают 'int'. Ваш' abc' является псевдонимом (другое имя) этого типа. – melpomene