Ocamlの" let .. and ... "には" type "と同じ種類のスコープがありません...と... ":Ocamlの "type ...と" let "と" let ... and "のスコープの不一致
folowing 1ではないスコープで
# let v1 = v2
and v2 = 3;;
Characters 9-11:
let v1 = v2
^^
Error: Unbound value v2
でV2、これ以下の1が間違っているT1と同じスコープでOK、T2
# type t1 = t2
and t2 = int;;
です
「レック」は機能しません...
# let rec v1 = v2
and v2 = 3;;
Characters 13-15:
let rec v1 = v2
^^
Error: This kind of expression is not allowed as right-hand side of `let rec'
なぜ「タイプ...」と「レット...」の間でスコープが一致しないのですか?ありがとうございました。
タイプは暗黙的に*等価です*。 * isorecursive *型を取得するには、コンパイラで '-rectypes'フラグを使用する必要があります。ここで認識される不一致は構文上のほのぼのに過ぎず、実際にはそれを形作る価値がありません。 'let ... and ... in ...'構造のように、 'nonrec ... and ...'構造体が言語の中に本当に必要ではありません。 –
@james:私はあなたが間違っていると思う、 '-rectypes'は等価性(名前とその展開の間の平等)を可能にしますが、標準代数的データ型は等価(アイソモルフィズム、コンストラクタによって媒介されます。これはスコープの質問とは何も関係ありません(スコープ内で利用可能なこの名前ですか?)。 'nonrec'問題については、リンク先のブログ記事を読んでください。これは、強制的に再帰的な型定義によって引き起こされる実際の不快感を示しています。 – gasche
後継の場合: 'type nonrec'は今や事です。 –