Wenn ich eine Bibliothek aus mehreren Modulen erstelle, finde ich keine gute Möglichkeit, dem Benutzer der Bibliothek (externe Schnittstelle) korrekte Informationen zu verbergen, während ich auf alles zugreifen kann die interne Schnittstelle.Externe und interne Schnittstellen und Informationen in OCaml verbergen
Um genauer zu sein, habe ich zwei Module (Dateien a.ml [i] und b.ml [i]). In A definiere ich einen Typ t, dessen Inneres ich nicht vor dem Benutzer verbergen möchte (externe Schnittstelle).
module A : sig
type t
end
module A = struct
type t = float
end
In Modul B, ich will dann die Geheimnis Art von A.t
verwenden.
module B : sig
create_a : float -> A.t
end
module B = struct
create_a x = x
end
Dies ist natürlich nicht kompiliert, da die Übersetzungseinheit von B nicht die Art von A.t
nicht kennt.
Lösungen Ich weiß, aber nicht mag:
- Verschieben Sie die Funktion
create_a
A
- Kopieren Sie die Definition von
A.t
-B
und betrügen den Typ-Checker mit einigenexternal cheat : `a -> `b = "%identity"
Gibt es eine andere Möglichkeit, den Typ A.t
in B
zu kennen, ohne diese Informationen an die Schnittstelle der Bibliothek zu verlieren?
nett! Auf Wiedersehen 'Pack'-Option ist es. – lambdapower