Когда я пишу регулярное выражение с .
в нем он не соответствует новым строкам.
preg_match('/.*+?/') ...
Что мне нужно написать, чтобы соответствовать всем возможным символам, Конец, который прекрасно работает для генерации модулей M ...
У меня следующая ситуация:
module type M = sig type s = ... end
module Make(P: Something) : (M with type s = P.t) = struct
type s = P.t
...
end
, которая отлично работает для генерации модулей типа M
, которые используют специфическую реализацию модулей типа Что-то
внутри их реализации.
Теперь предположим, что у меня есть другой модуль, определенный как
module type AU = sig
val feed : float -> unitv
val nth : int -> (float -> float)
val reset : unit -> unit
end
, который имеет различные реализации
module SUAlg : AU = struct ... end
module MLAlg : AU = struct ... end
module ACEAlg : AU = struct ... end
. Вопрос в том, что модуль M
должен быть параметризован через Теперь две вещи: модуль Something
и модуль AU
, так что это что-то вроде
module Make(P: Something) : (M with type s = P.t) = struct
type s = P.t
module Alg = MLAlg (* just an example *)
...
end
, но я хотел бы иметь универсальный функтор, который дал бы Something
и с учетом AU
он производит модуль с обеими конкретными вещами. Есть ли способ получить это легко?
Поскольку синтаксис функтора довольно странный, и я Я все еще новичок в этом, я не знаю, может ли то, что я прошу, быть решено простым способом или нет.
Заранее спасибо
Да, у функтора может быть несколько аргументов. Синтаксис такой:
module Make_LOffset
(V:Lattice_With_Isotropy.S)
(LOffset : Offsetmap.S with type y = V.t and type widen_hint = V.widen_hint) =
struct
…
end
Функтор затем может быть применен с помощью Make_LOffset (V) (LOffset)
.
В этом примере, взятом из существующего кода для обеспечения его синтаксической правильности, Make_LOffset
параметризуется двумя модулями V
и LOffset
соответствующих сигнатур Lattice_With_Isotropy.S
и Offsetmap.S
. Есть дополнительные ограничения типа между двумя сигнатурами, частью с типом… и частью типа…
.