I've just read the post "Destroying Performance with Strictness" by Neil Mitchell [1].

One of the comments from an Anonymous says:

How hard would it be to lift strictness annotations to type-level? E.g. instead of
f :: Int -> Int
f !x = x + 1
write
f :: !Int -> Int
f x = x + 1
which would have the same effect. At least it would be transparent to the developer using a particular function.

The problem I see with this approach is on type classes, as it would be impossible to declare a type instance with strict implementation to a type class that used lazy types.

Is this a real problem? Is it the only one?

[1] http://neilmitchell.blogspot.ru/2013/08/destroying-performance-with-strictness.html