Ես փորձեցի օգտագործել առաջին կարգի մոդուլը` ներդնելով կոդի այս հատվածը.
module Component =
struct
type t_data = ..
module type S =
sig
type t
val create : t -> t_data
end
module Make (C: sig type t end) =
struct
type t = C.t
type t_data += T of C.t
let create data = T data
end
end
let create m data =
let module M = (val m : Component.S) in M.create data
(* The type constructor M.t would escape its scope *)
Ես նույնպես կփորձեի այս այլընտրանքը, բայց չգիտեմ, թե ինչպես ավելացնել ընդլայնված t_data տիպը S մոդուլում:
let create' m data =
let module M = (val m : Component.S) in M.T data
(* Unbound constructor M.T *)
Ես օգտագործում եմ bucklescript, շնորհակալություն:
M.t
-ը դրսում անուն չունի, քանի որ այն թաքնված էm
արժեքի ներսում: Այս դեպքում դա քիչ թե շատ անավարտ տեսակի եզրակացության արտեֆակտ է. փոխարենը վերջնական տեսակն անցնում է տիպի փոփոխականով: 07.05.2018