ワールドを与える前の高階関数のfooとしては
「getStr >>= \s -> putStr "a"++"b"++s」という「意図」と
「getStr >>= \s -> putStr "ab"++s」という「意図」のどちら
ですか。それとも上記は処理系の話であって計算とは関係ない?
ともかくfooを実行するとワールド込みで実行されてしまうの
ですね。我々はあるワールドの中(?)から観察しているので
副作用に見えるということでしょうか。