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 + 1
will 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.