私は F# の記事を読んでいますが、単一のケース バリアントを使用して、互換性のない明確な型を作成しています。しかし、Ocaml では、プライベート モジュール型または抽象型を使用して、個別の型を作成できます。Ocaml では、F# や Haskell のように単一ケースのバリアントを使用するのが一般的ですか?
4 に答える
6
単一のコンストラクタ バリアントの別の特殊な使用例は、GADT (および存在量化) を使用して一部の型情報を消去することです。たとえば、
type showable = Show: 'a * ('a -> string) -> showable
let show (Show (x,f)) = f x
let showables = [ Show (0,string_of_int); Show("string", Fun.id) ]
コンストラクターShowは、指定された型の要素と印刷関数を組み合わせてから、要素の具体的な型を忘れます。これによりshowable、各要素が異なる具象型を持っていたとしても、要素のリストを持つことが可能になります。
于 2021-04-26T09:05:01.617 に答える