unsafeな関数の禁止
名前にunsafeが付く関数は、
参照透過性や型安全性といったHaskellの根幹の保証を破壊するため、
原則として使用を禁止します。
unsafe接頭辞は「これを使うと言語の保証が効かなくなる」という作者からの警告です。
特に避けるべき関数
unsafePerformIO
IOアクションを純粋なコンテキストで実行します。
参照透過性を破壊します。 GHCの最適化により評価回数や評価順序が変わったり、 共有によって一度しか実行されなかったりするため、 副作用のタイミングを予測できなくなります。
unsafeDupablePerformIO
unsafePerformIOの制約をさらに緩めたものです。
複数のスレッドから同時に、
あるいは重複して実行される可能性があり、
unsafePerformIOよりも危険です。
unsafeInterleaveIO
IOアクションを遅延実行します。
実際に値が必要になるまで実行が遅延されるため、
副作用の発生タイミングが完全に非決定的になります。
[Description truncada. Veja o README completo no GitHub.]