Я пытаюсь ссылаться на тип в сигнатуре модуля для создания другого типа.ссылка на подпись типа модуля
module type Cipher = sig
type local_t
type remote_t
val local_create : unit -> local_t
val local_sign : local_t -> Cstruct.t -> Cstruct.t
val remote_create : Cstruct.t -> remote_t
val remote_validate : remote_t -> Cstruct.t -> bool
end
module Make_cipher :
functor (Cipher_impl : Cipher) ->
sig
type local_t = Cipher_impl.local_t
type remote_t = Cipher_impl.remote_t
val local_create : unit -> local_t
val local_sign : local_t -> Cstruct.t -> Cstruct.t
val remote_create : Cstruct.t -> remote_t
val remote_validate : remote_t -> Cstruct.t -> bool
end
type self_t =
{
mutable modules : (module Cipher) list;
mutable locals : Cipher.local_t list;
}
Когда я скомпилирую это, я получаю сообщение «Ошибка: Unbound module Cipher» для self_t. Я не слишком уверен, что делать здесь.
Ah - но существует множество реализаций 'Cipher_impl.local_t'. Возможно, мне нужно каким-то образом сделать это полиморфным? – njb
«Cipher_impl» - это параметр функтора, который обозначает множество реализаций. Это как формальный параметр функции, который обозначает множество возможных значений. – ivg
Если я выполняю «изменчивые локали: Cipher_impl.local_t list;», тогда я получаю «Ошибка: Unbound module Cipher_impl» – njb