Типы модулей являются спецификациями для модулей. Они не определяют типы сами по себе. Они также никак не построены функторами. Следовательно, трудно сказать, что вы пытаетесь сделать. Насколько я могу видеть, вы можете просто определить тип вашей ячейки с помощью функтора:
module Cell(P : Partial_information) = struct
type id = { name : string ; modifier : int }
type partial
type t = {
contents : P.t;
id : id
}
end
Или еще проще сделать тип ячейки полиморфным:
type 'a cell = {
contents : 'a;
id : id
}
, так какСам по себе тип не особенно интересен и не зависит от типа содержимого.
PS: можно использовать модули первого класса и GADT для количественного определения конкретной реализации типа модуля. Но неясно, стоит ли взрывать ваш бюджет сложности здесь:
type 'a partial_information = (module Partial_information with type a = 'a)
module Cell = struct
type id = { name : string ; modifier : int }
type t = E: {
contents : 'a ;
partial_information_implementation: 'a partial_information;
id : id
} -> t
end