>>22
>  毎回出力する必要は無いので、後者だと思います。

なんかずれてるような。
> (withdraw 25)
> 75
> (withdraw 25)
> 50
このwithdrawは(同じ引数に対して別の値をかえすので)
関数じゃないというのはわかってる?

だから、
withdraw :: Int -> Int
ではなくて
withdraw :: Int -> IO Int
になる。別にIO Intにしたからって毎回出力するわけじゃないよ。