In this passage, after the seq call, :sprint reveals x and y to be evaluated:
let x = 1 + 2 :: Int
let y = x + 1
:sprint x
:sprint y
seq y ()
:sprint x
:sprint y
The above is a verbatim quote of Marlow's Concurrency book, chapter 2.
In the below, however, :sprint shows them unevaluated both before and after the seq call.
let x = 1 + 2
let y = x + 1
:sprint x
:sprint y
seq y ()
:sprint x
:sprint y
Why?