問題タブ [value-restriction]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
exception - 値のポリモーフィズムと「例外の生成」
標準 ML の定義 (改訂)ごとに:
非拡張式の動的評価は例外を生成せず、メモリのドメインを拡張することもありませんが、拡張式の評価は例外を生成する可能性があります。
[§4.7、p19; 強調鉱山]
ref-cell 部分についてはオンラインで多くの情報を見つけましたが、例外部分についてはほとんどありません。(いくつかの情報源は、ポリモーフィック バインディングが を発生させる可能性が依然としてBind
あり、この矛盾が型理論および/または実装の結果をもたらす可能性があることを指摘していますが、それが関連しているかどうかはわかりません。)
私が間違っていなければ、値の制限によってのみ防止される例外関連の不健全さを思い付くことができました。しかし、その不健全さは例外の発生に依存しません:
では、定義が何を目指しているのか、なぜ例外について言及しているのか、誰か教えてもらえますか?
(「例外を生成する」とは、例外パケットを生成するのではなく、例外名を生成することを意味する可能性はありますか?)
f# - seq の F# 値の制限リストではありません?
値制限エラー:
値制限なしエラー:
なんで?
recursion - F# スプリット関数
マージソート関数を作成していますが、分割メソッドで値制限エラーが発生しています。私は2つの累積パラメータを使用しています.2つのリストは、分割の結果であり、最後にタプルにパッケージ化して返します。しかし、値制限エラーが発生し、何が問題なのかわかりません。誰にもアイデアはありますか?
どんな入力でも大歓迎です。
ocaml - この OCaml コードが値の制限を受けない理由
関数 ( my_path_mapper ) が値の制限を受けていないことがわかりません。
教えてください なぜ?
monads - ML におけるモナドと値制限
MLの値の制限により、型の安全性が損なわれる可能性があるコンテキストでの型の一般化が妨げられます。コアの問題は、次の OCaml コードの例のように、シーケンスされた突然変異とポリモーフィック タイプを組み合わせることから発生するようです。
値の制限がなければ、最後の行はエラーなしで型チェックされます。なぜなら、ポリモーフィック型はx
と統合されるからbool
です。これを防ぐには、 の型x
はモノモーフィックのままにする必要があります。
私の質問は次のとおりです。操作のシーケンスを表現するためにモナドを使用することで、値の制限を取り除くことは可能でしょうか?
関数の引数として、モナドのbind
操作を通じて導入された変数は、シーケンス全体で単型のままであるため、一般化の際に特別なケースを導入することなく、値の制限と同じ効果が得られるようです。
これは機能しますか?そうでない場合は、なぜですか?
compiler-errors - 値制限エラー詳細
値制限エラーが発生します:
error FS0030: Value restriction. The value 'empties' has been inferred to have generic type val empties : '_a list []. Either define 'empties' as a simple data term, make it a function with explicit arguments or, if you do not intend for it to be generic, add a type annotation.
これはしませんが:
違いは何ですか?SOの質問には「あなたが試したこと」を含める伝統があることは知っていますが、何を試したらよいかさえわかりません。それは概念的な質問です...
scala - Scala には ML のような値の制限がありますか? そうでない場合、なぜですか?
質問に対する私の考えは次のとおりです。誰でも確認、否定、または詳しく説明できますか?
私は書いた:
Scala は共変
List[A]
を に割り当てられた GLB ⊤ と統合しません。割り当ての方向が重要な「二重統合」をサブタイプ化することList[Int]
で bcz は承知しています。したがって、またはからの代入を受け入れることができないNone
タイプOption[⊥]
(すなわちOption[Nothing]
)が必要Nil
です。そのため、値制限の問題は方向性のない統一に由来し、グローバルな二重統一は、上記にリンクされた最近の研究まで決定できないと考えられていました。List[Nothing]
Option[Int]
List[Int]
上記のコメントのコンテキストを表示することをお勧めします。
ML の値の制限により、特にカリー化された関数 (関数型プログラミングで重要) を部分的に適用する場合など、パラメトリック ポリモーフィズムを許可しない場合 (以前はまれであると考えられていましたが、より一般的である可能性があります) )、代替の型付けソリューションは、関数型プログラミングと命令型プログラミングの間の階層化を作成し、モジュラー抽象型のカプセル化を破るためです。Haskell には、類似の二重単形化制限があります。OCaml では制限が緩和されている場合があります。これらの詳細のいくつかについて詳しく説明しました。
編集:上記の引用で表現された私の最初の直感(サブタイプによって値の制限が取り除かれる可能性がある)は間違っています。回答 IMO は問題をよく説明しており、アレクセイ、アンドレアス、または私のものを含むセットのどれを選択するのが最良の回答であるかを判断できません。IMO それらはすべて価値があります。