私は2つのモジュールを持っています。一つは、バリアント型定義:Ocamlのコンストラクタ名の略語
module A = struct
type foo = Bar of material | Baz | Boo
(* other stuff *)
end
およびI「はsが別のモジュールのコンストラクタのように左手側の両方
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
バリアントfoo
を使用できるようにしたいが、"referring to named objects"あたりI Uを避けるスキップする方法はあり
let f (x : foo) = match x with
| A.Bar m -> A.Bar (g m)
| A.Baz | A.Boo -> x
:モジュールパスとバリアント名を接頭辞に持ちますopen
の短いモジュールパスを歌い、他のすべてのものをA
から引き出しますか?
ブリリアント。ありがとう。 –
「バックグラウンドで」作業する場合、[タイプベースのラベル曖昧さ除去の提案](http://gallium.inria.fr/~scherer/gagallium/resolving-field-names/)を参照している場合は、(1 )それは最終的に受け入れられないかもしれませんし、(2)レコードラベルのためだけでなく、(多形ではない)バリアントコンストラクタでもうまくいくはずです。 – gasche
OCamlでは 'open in'構文がバージョン3.12から上に利用可能です。 – didierc