How can I have a module signature where one of the values accepts a first-class module of that very same signature? MWE:
module type SIG = sig type t val size : int val convert : (module SIG) -> t -> P.t option end module Make (Params : sig val size : int end) : SIG = struct type t = int include Params let convert (module P : SIG) x = Some x end
Make(struct let size = foo end) is supposed to represent positive integers smaller than
size, and I want a
convert function to convert
Q are different instances of this same functor (with possibly different sizes). Is this possible to express in OCaml?