現在、OCamlにプログラムをビルドしています。次の問題があります。もう一方の型の値を含む2つの型が必要です。その基本的には(しかし、もう少し複雑な)このように:私は、私はそれを使用しようとする場合、私は、私は(そう、この宣言は、エラーをスローしません)前に定義されていませんでした型を参照するが、可能性に気づいOCamlの型定義で後に宣言された型を使用します。
type a = {
x: some_other_type;
next: b
};;
type b =
NoA
| SomeA of a;;
それは2つのタイプのbを区別します:aの定義で述べたものと、私が定義したものです。
私はそれを醜い方法で行うことができます知っている:
type 'b a = {
x: some_other_type;
next: 'b
};;
type b =
NoA
| SomeA of b a;;
をしかし、私は、私はかなりのように、そのBを見ることが直接できることことを認めざるを得ないが、私は任意のより良い解決策があるかどうか(知っていただきたいと思います再帰型です)。
最初のアプローチで 'next: 'b'の代わりに' next:b'を指定するべきではありませんか? – CodenameLambda
いいえ、 'b'はまだ定義されていません。だから、私たちは、 'b'がどんなものであれ、私たちの型' a'をパラメタライズしています。 – ivg
私は最初と最後の間に "and"を付けました。 – CodenameLambda