Force strict evaluation of an expression. For example
f x ((y+1){-#STRICT#-})forces evaluation of y+1 before the call of f.
{-# SPECIALIZE f :: T, ...}Specialize the function t to the type(s) T. For example
{-# SPECIALIZE inc :: Int->Int, Double->Double #-} inc x = x + 1will give the usual overloaded version of inc, but also versions specialized to the types Int and Double. The specialized instances are used whereever the typechecker can determine (statically) that the specialized type occurs.
{-# SPECIALIZE instance C T #-}Specialize an instance declaration to a particular type. Suitable specializations have been inserted for a lot of functions and instances in the standard prelude to improve efficiency.
If this pragma is given on the first line of a file the flags are decoded as ordinary compiler flags.