論文「代数的効果とハンドラーのための効果システム」のサブタイプについて質問がありました。ハンドラー型の両側にエフェクトを追加するためのサブタイピングルールがないのはなぜですか?
これは、ハンドラータイプの変数を左側にあるハンドラータイプよりも多くの効果を持つ計算に適用する場合に役立ちます。
ハンドラーの入力規則を使用して、ハンドラー型の両側に効果を追加できますが、これは変数では機能しません。たとえば、ハンドラーが関数の引数である場合。
論文「代数的効果とハンドラーのための効果システム」のサブタイプについて質問がありました。ハンドラー型の両側にエフェクトを追加するためのサブタイピングルールがないのはなぜですか?
これは、ハンドラータイプの変数を左側にあるハンドラータイプよりも多くの効果を持つ計算に適用する場合に役立ちます。
ハンドラーの入力規則を使用して、ハンドラー型の両側に効果を追加できますが、これは変数では機能しません。たとえば、ハンドラーが関数の引数である場合。
回答:
Andrejと私はかなり長い間このルールを追加することを検討しており、その正しさを証明したと信じているため、この質問が頻繁に出されないことに驚いています。しかし、結局のところ、少なくとも値による呼び出しの設定では、これは誤りであることがわかりました(プッシュ値による呼び出しでうまく機能すると聞いています)。
同じ論文の24ページで説明されている状態ハンドラーについて考えてみましょう。このハンドラーは、状態でタイプステートフル計算を実行し、それをからへの純粋な関数に変換します。そのタイプは右側にある2つの空のセットに注意してください。1つ目は、結果の関数が純粋であることを示し、2つ目は、この関数の生成時に影響が発生しないことを示しています。
ここで、ハンドラーを計算に適用して、と以外の呼び出すと仮定します。提案されたルールを適用すると、タイプ が、実際には正しいタイプは 未処理の効果としてのは、関数の生成前または呼び出し後に発生する可能性があります。