せっかくの話の流れをぶった切って申し訳ないですが、質問します。

正格性フラグの付いたデータ型のことですが、

data X = X !Int
・・・
let x = X a

この場合、x の値が実際に必要になるかどうかに関わらず、
X a の a が評価されるという意味でしょうか。

もうひとつ、

data F = F !(Int -> Int)
・・・
let f = F g

この場合、g が評価されたというのは、どういう状態を指すのでしょうか。
と言うのも、関数ではない値なら弱頭部正規形になるまで評価され、
それがどういった形なのか頭の中にイメージ出来るのですが、
関数の評価という意味がいまひとつイメージ出来ません。

もしかして、g w = if v then 関数1 else 関数2 などと場合分けされていた場合に、
f = F g の時点でこの v まで評価されて関数1か関数2かが決定されるということであり、
単に g w = 2+w などという関数であれば正格性フラグを付ける意味はない、
ということでしょうか。