Используя мираж, у меня довольно большой функторный беспорядок.Пытаясь немного его очистить, я создал большой уродливый Context
модуль, параметризованный по всем типам и значениям, которые мне нужно передать в моем коде.Поскольку, очевидно, передача только тех значений, которые мне нужны, позволила бы типам «выходить из области видимости» в кавычках компилятора, я просто передаю этот модуль в качестве аргумента функциям fun x (module Ctx : Context) ... =
Немного раздражает, но использоватьоно работает.Итак, в основном:
let module Context = MkContext(S)(C)(ContextConfig) in
S.listen_tcpv4 stackv4 ~port:8442 (Context.handleConnection console);
Внутри Context.handleConnection мне нужно вызвать функцию, которая принимает Context в качестве аргумента.Один из способов сделать это, я полагаю, состоит в том, чтобы передать Context в handleConnection, например, так:
S.listen_tcpv4 stackv4 ~port:8442 (Context.handleConnection console (module Context));
, а затем передать его из handleConnection как this функциям, которым это необходимо, но я предполагаю, что должен бытьлучший способ?
РЕДАКТИРОВАТЬ: Даже не могу этого сделать, мне нужно, чтобы тип модуля был рекурсивным, что не кажется тривиальным.