@rahmu Really, they aren't. What you notice is a side-effect of how we convert statements to expressions.

See for instance:
```clojure
=> (defn side-effects [x] (print "I can has" x) x)
=> (and (side-effects false) (side-effects 42))
I can has False
False
```

The issue is that right now, the statements we "hoist" above expressions are executed unconditionally. I kinda-agree that the statements we hoist should really get deferred until we actually evaluate the resulting expression.

We could put those statements in a function call, but then they wouldn't be able to affect the global namespace, which isn't very obvious either. I'm open to ideas on how to fix that issue.