分かってる人には当たり前なのかもしれないが

> double :: Int -> Int
> double x = x * 2

これを
> 関数 double 内では副作用がある処理はできない
こう説明されても、なぜできないのかサッパリ分からんぞ?