Tôi đang xây dựng hai thư viện trong OCaml chứa cùng loại biến thể. Các chi tiết của biến thể không phải là quá quan trọng, khác hơn là nó thực sự là lớn, và nó sẽ được gây phiền nhiễu để viết các chức năng chuyển đổi bằng tay cho nó. (Nó thực sự là bfd_architecture liệt kê chuyển đổi từ C bằng cách sử dụng ocamlidl).Loại tương đương OCaml
Tôi hiện đang viết chương trình bằng hai thư viện. Đặc biệt, tôi đang gọi A.f trả về giá trị của A.variant_type và tôi cần phải sử dụng giá trị đó trong cuộc gọi đến B.g, giá trị của B.variant_type là đầu vào.
Có cách nào để nói với OCaml rằng A.variant_type và B.variant_type thực sự là cùng loại hay không và do đó, nó có thể chuyển đổi giá trị từ cái này sang giá trị khác? Các thư viện độc lập, vì vậy chúng không nên tham chiếu lẫn nhau. Ngay bây giờ tôi đang sử dụng Obj.magic để thực hiện chuyển đổi, nhưng đây là một hack.
tại sao bạn không thể, như ygrek gợi ý, có hai thư viện chia sẻ cùng một loại biến thể, thay vì tạo hai biến thể khác nhau có cùng cấu trúc? – gasche
Nói cách khác, hãy đặt loại biến thể thành mô-đun thứ ba và sử dụng nó trong các mô-đun khác. Bạn có thể 'mở' module để làm cho việc đặt tên nhẹ hơn. –