>>505
>>479 をもっかい見てみたら?

getCharが2回続けて出てきたとして、
do
 c1<-getChar
 c2<-getChar
 ...
実行時に起きることの気分は、
let (c1, w1) = (getChar w0)
in
 let (c2, w2) = (getChar w1)
 in
 ...
みたいな感じだよ?
どの行が副作用に見える?