Unfortunately I couldn't find any information to the question.
data Person =
Person { firstName :: !Text
, lastName :: !Text
, age :: Int
, likesPizza :: Bool
} deriving Show
The code snippet is token from article Parsing JSON with Aeson.
Aside the question in the title, is there a rule when ! should be used?
In the example above ! is used only for firstName and lastName.