data Id a = Id a deriving Show
instance Monad Id where
   Id x >>= f = f x
   return = Id

foo :: Int -> Id Int
foo arg =
  do { x <- ID arg
     ; x <- ID (x * 2)
     ; x <- ID (x + 1)
     ; return x }
というHaskell のプログラムと、
int
foo (int arg)
{
   int x;
   x = arg;
   x = x * 2;
   x = x + 1;
   return x;
}
は、そっくり。上は副作用をつかってないですけど、
下は副作用をつかっています。
そんだけ。

int