私は Haskell と IO モナドを学んでいます。これにより、プログラムが「こんにちは」と「さようなら」を出力するように強制されないのはなぜだろうかと思います。
second a b = b
main = print ((second $! ((print "hi") >>= (\r -> return ()))) "bye")
私が理解している限り、$!
オペレーターは の最初の引数を強制的second
に評価し、その値から値を取得して に渡すために>>=
オペレーターを実行する必要があります。これにより、「hi」が画面に出力されます。print "hi"
\r -> return ()
私の推論の何が問題になっていますか?
また、Haskell が「安全な」コード内で IO 操作を実行するように (安全でない関数を使用する以外に) だまされないことを証明する方法はありますか?