Hãy nói rằng tôi có một mô-đun M
tham số của một mô-đun F
:Làm thế nào xác định một chữ ký mô-đun mà thực hiện mô-đun được tham số hóa bởi một functor
module M (F : sig type id type data end) =
struct
type idtype = F.id
type datatype = F.data
type component = { id : idtype; data : datatype }
let create id data = { id; data }
let get_comp_data comp = comp.data
let get_comp_id comp = comp.id
end
vì vậy tôi sử dụng nó như thế này:
module F1 = struct type id = int type data = float end
module MF1 = M(F1)
let comp = MF1.create 2 5.0
let id = MF1.get_comp_id comp
Bây giờ, nếu tôi muốn M
để khớp chữ ký S
:
module type S =
sig
type idtype
type datatype
type component
val create : idtype -> datatype -> component
val get_comp_data : component -> datatype
val get_comp_id : component -> idtype
end
module F1 = struct type id = int type data = float end
module MF1 = (M(F1) : S)
let comp = MF1.create 2 5.0
let id = MF1.get_comp_id comp
những gì làm phiền tôi ở đây là, để xác định get_comp_data
và get_comp_id
, tôi cần phải chỉ định idtype
và datatype
trong mô-đun S
; bây giờ chỉ cần tưởng tượng tôi có các loại bản ghi khác trong M
với các loại của riêng mình, tôi sẽ có một tá loại để xác định trong S
? Có cách nào đơn giản hơn để tránh điều đó không?
không biết bạn có thể đặt một module trong một mô-đun có cùng tên; bẩn thỉu – codablank1