Это мой функтор ORDTYPE. Я хочу использовать сравнение внутри EmptyQueue. Я не знал, как вводить функтор. Все время я получаю ошибки, у которых есть недопустимая подпись. Я пытался объявить функтор (ключ: ORDTYPE) -> до структуры, но это было неправильно. Я не понимаю идеи функторов. Я вижу несколько простых примеров в вики OCaml, но я не знал, как справляться с чем-то более сложным.Функциональные функции OCaml с более сложным примером
Короче говоря, я хочу использовать компаратор в пустом виде. Но я не знал, как с этим бороться, чтобы сделать это более абстрактным.
module type ORDTYPE =
sig
type t
val compare : t -> t -> int
end;;
module Icmp:ORDTYPE with type t= int=
struct
type t = int
let compare = fun x y -> if(x< y) then 0 else 1
end;;
module type STH=
sig
type priority
type 'a t
val comp: x -> x->bool
end;;
module Emptyqueue (Comp: ORDTYPE): STH with type priority= int =
struct
type priority = int
type 'a t = Empty
let comp = fun x y -> Comp.comp x y
end;;
Я отредактировал, как я думаю, что должен делать это, но это не так. Работа.