¿Cuándo se evalúa mi expresión de Haskell?

Si yo defino

λ> data Bar = Bar Int deriving Show
λ> data Foo = Foo Bar deriving Show

y

λ> let foo = trace "foo" Foo (trace "bar" Bar 100)
λ> let two = trace "two" 2
λ> let g (Foo x)  y = y

entonces creo que entiendo por qué me sale

λ> g foo two
foo
two
2

Pero si luego repito esto, me sale

λ> g foo two
two
2

y no entiendo por quéfoo parece no haber sido evaluado para la segunda invocación deg, especialmente porque claramente no está (todavía) de alguna manera ya disponible, como puedo verificar con

λ> foo
Foo bar
(Bar 100)

aunque, de nuevo, para mi confusión, repetir lo anterior da

λ> foo
Foo (Bar 100)

¿Por qué mifoo ¿la expresión parece estar ya evaluada en algunos casos y no evaluada en otros? Y para el caso, ¿por qué mitwo expresiónsiempre necesita ser evaluado?

Respuestas a la pregunta(2)

Su respuesta a la pregunta