import "Prelude" inc :: Ref Integer -> Integer inc r = do v = getRef r newV = v+1 r := newV newV main = do r = ref 0 // Because both map and for get side-effectful functions // as parameters, the fusion is not allowed. l = map (\_ -> inc r) [1..4] for l (\i -> r := i+1) getRef r -- 5