我在OCaml中構建了兩個包含相同變體類型的庫。這個變體的細節並不是太重要,除非它非常大,並且手動爲它編寫轉換函數會很麻煩。 (它實際上是使用ocamlidl從C轉換而來的bfd_architecture枚舉)。OCaml等效類型
我現在正在使用這兩個庫編寫一個程序。特別是,我打電話給A.f,它返回A.variant_type的值,我需要在調用B.g時使用該值,它將B.variant_type的值作爲輸入。
有沒有什麼辦法可以告訴OCaml A.variant_type和B.variant_type是真的是一樣的類型,因此可以將值從一個值轉換爲另一個值呢?這些庫是獨立的,所以它們不應該互相引用。現在我使用Obj.magic來完成轉換,但這是一個破解。
爲什麼你不能像ygrek所說的那樣,讓這兩個庫共享相同的變體類型,而不是生成具有相同結構的兩個不同的變體? – gasche 2012-02-15 15:27:48
換句話說,將變體類型放入第三個模塊中,並在其他模塊中使用它。您可以「打開」模塊以使命名更輕量化。 – 2012-02-15 16:07:40