Mam dwa moduły. Jeden definiuje typ wariantowej:Skróty nazw konstruktorów w Ocaml
module A = struct
type foo = Bar of material | Baz | Boo
(* other stuff *)
end
i chciałbym móc używać foo
„s warianty zarówno konstruktorów jak i lewostronnego dwustronnego w innym module
module B = struct
type foo = A.foo (* I can abbreviate A.foo by assigning it a local alias *)
let f (x : foo) = match x with
| Bar m -> Bar (g m) (* Any way to abbreviate Bar and friends? *)
| Baz | Boo -> x
end
ale za "referring to named objects" I trzeba poprzedzić nazwy wariantowe z modułem ścieżce :
let f (x : foo) = match x with
| A.Bar m -> A.Bar (g m)
| A.Baz | A.Boo -> x
Czy istnieje jakiś sposób, aby uniknąć u pominąć śpiewać ścieżkę modułu krótszą niż open
i ciągnąc wszystkie inne rzeczy od A
?
Genialny. Dzięki. –
Jeśli pracujesz "za kulisami", odwołujesz się do [propozycji ujednolicenia etykiety na podstawie typu] (http://gallium.inria.fr/~scherer/gagallium/resolving-field-names/), a następnie (1) może nie zostać zaakceptowany na końcu i (2) powinien działać dla (nie-polimorficznych) wariantów konstruktorów tak samo dobrze jak dla etykiet rekordów. – gasche
Składnia 'otwórz w 'jest dostępna w OCaml od wersji 3.12 w górę. – didierc