>>874
>出力しかしない恣意的な例じゃなくて、出力した結果を入力として受けるような例で。
文字列をファイルに書き出して、それを読み込むアクションでいい?

import Control.Exception

action :: IO String
action = do
  writeFile "temp.txt" "hogehoge\n" -- temp.txtに出力した結果を…
  readFile "temp.txt" -- 入力として受ける

main :: IO ()
main = do
  evaluate action -- actionをWHNFまで評価する
  putStrLn "done!"
  getLine -- すぐに終了しないように入力待ち
  return ()

実行してみると分かる通り、temp.txtは生成されない
actionを評価しても、手順を表現する単なるデータが得られるだけで、それが勝手に実行されることはない