2017-01-22 4 views
0

У меня есть тип, определяемый как type abc = bool->int;;, который объясняет простое сопоставление от bool до int. Мой вопрос: как я могу использовать этот type abc?Как использовать тип Ocaml с отображением функций?

Как, например, если у меня был

type Color = Red|Green|Blue|Dark of Color|Light of Color;;

Тогда я мог бы использовать что-то вроде Dark Red;; имея type Color. Но теперь я не могу использовать этот новый type abc.

+0

Это странный вопрос. Обычно вы начинаете с проблемы и пишете код, чтобы решить эту проблему. Вы не записываете случайный код, а затем «хорошо, как я могу это использовать сейчас?». – melpomene

+0

Я использую аналогичное отображение в своей функции, но я не могу раскрывать этот код здесь. И я застрял здесь, я не знаю, как использовать это определение типа отображения. :( –

+0

Обычный термин для этого «сопоставления» - это «функция». 'Bool -> int' - это тип функций, которые берут' bool' и возвращают 'int'. Ваш' abc' является псевдонимом (другое имя) этого типа. – melpomene

ответ

1

Этот тип 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 указывает, что для значений функций не существует равенства. Таким образом, вы не можете сопоставлять значения функций.

+0

Использовал этот тип только как пример, но спасибо за указание на эту ошибку :) –

+0

Я просто хотел использовать эту функцию для простого случая, но я не мог найти ничего близкого к ней в Интернете, поэтому я закончил Вот. Я только начал изучать Окамла, так что найти его немного сложно .. :) –

 Смежные вопросы

  • Нет связанных вопросов^_^