ハスケルのSTモナドが正しく理解されている場合、runST
はモナドをエスケープする際に計算が他のスレッドを参照しないように賢明な方法でランク2型を使用します。ヒンドレーミルナー型システムを持つrunST
私はHindley-Milnerタイプのシステムでおもちゃの言語を使用しています。私の質問は次のとおりです.STモナドが安全になるようにrunST
アプリケーションを入力するアドホックルールを使用してHMタイプシステムを拡張できますか?脱税可能、ランク2タイプを導入しないで?
より正確には、runST
はタイプforall s a. ST s a -> a
(すなわち、ランク-1)を持っているだろうと型付け規則が最初のHMは、LET-式での型を一般と同じ方法で計算式を一般化しようとしますが、あれば型エラーを引き上げますs
型変数がバインドされています。
上記は、バニラHMと比較して許容されるプログラムのみを制限しているので、音が良いように見えますが、わかりません。これは効果がありますか?質問へのコメントは完全には明らかではありません念の
はい、あなたのように 'runST'を追加することができます。興味深いことに、我々はこれらのいずれもいるので、ランク2の型シグネチャを必要とし、
ST
タイプを導入するもののための特別なルールを作成する必要が終わるません必要な小切手を行う特別なタイピング規則。 – augustssありがとうございました:-) – max
型変数 's'が' a'に現れていないかチェックしなければなりません。さもなければ、状態がモナドの外側に漏れる可能性があります。 – max