25

Data.UnionFindが IO モナドを使用して、IORef を介してポインターを提供していることに気付きました。unsafePerformIOデータ構造は非常によく理解されているため、純粋なコードでローカルで使用する場合、誰もが喜んで呼び出すと思いますが、..

そのようなデータ構造に対する標準的なよりクリーンなアプローチはありますか? おそらく、unsafePerformIOほとんどのIO操作を禁止することで、避けられない「見た目」の危険性を軽減するIOのラッパーですか?

4

1 に答える 1

32

そのようなデータ構造に対する標準的なよりクリーンなアプローチはありますか? おそらく、ほとんどのIO操作を禁止することにより、避けられないunsafePerformIOの「見た目」の安全性を低下させるIOのラッパーですか?

はい、正確に。あなたは、約 20 年前にLaunchbury と Peyton Jonesによって導入された ST モナドを発明したばかりです。

モナドは、STローカルスコープのメモリ効果のみを許可します。型システムを使用して、副作用を使用しているコード ブロックの範囲外では副作用が見えないことを保証するという点で注目に値します。

したがって、ローカル スコープでのみ参照を介してのみメモリを使用する限り、unsafePerformIOたとえば、union-find を実装するために、代わりに純粋な ST を回避して使用できます。

于 2012-04-24T13:24:07.603 に答える