私がHaskellについて最も気に入っていることの1つは、コンパイラが関数シグニチャのIOモナドを介して副作用をどのように見つけるかです。エスケープモナドIO
{-# LANGUAGE MagicHash #-}
import GHC.Magic(runRW#)
import GHC.Types(IO(..))
hiddenPrint ::()
hiddenPrint = case putStrLn "Hello !" of
IO sideEffect -> case runRW# sideEffect of
_ ->()
hiddenPrint
は型ユニットであるが、それは(それがハロー印刷します)と呼ばれるときの副作用をトリガします:しかし、2つのGHCプリミティブをインポートして、このタイプのチェックを回避しやすいようです。隠されたI/Oを禁止する方法はありますか(GHCのプリミティブを誰もインポートすることを信じる以外に)?
私はIOの有用性(と同様の安全機能)は、 "あなたがそれを壊したくない場合には簡単な方法ではない" 。 –
また、 'System.IO.Unsafe'をインポートし、' unsafePerformIO'を使用する方が簡単です;)。バイパスは簡単ですが、安全ではありません。 – Zeta
'unsafeDupablePerformIO(IO m)=(#_、a#) - > a'のrunRW#mこれはまったく同じですが、このモジュールは分かりませんでした:) simplifierのを読むときに' runRW#コア。 –