Language extensions - backwards compatibility

Simon Marlow marlowsd at
Fri Jan 29 04:46:18 EST 2010

On 28/01/10 23:38, Iain Alexander wrote:
> I'm looking for a way of specifying language extensions in a way which will
> work in all versions of GHC from 6.4 onwards.
> GHC 6.4 does not support the LANGUAGE pragma.  Specifying language options in
> the OPTIONS_GHC pragma starts to produce deprecation warnings in 6.10, and will
> presumably eventually fail altogether.
> Any sort of preprocessing at the beginning of a file appears to insert enough
> noise to inhibit recognition of file-header pragmas. (Cpphs doesn't appear to
> help here.) Attempting preprocessing inside a leading OPTIONS_GHC pragma fails
> because it apparently attempts to interpret the pragma *before* invoking the
> preprocessor.
> The only remaining option I can see is to have a completely separate version of
> the file for GHC 6.4.  Have I missed anything?

There are a little cluster of bugs to do with this, see

We need to re-read the pragmas after preprocessing.  Ironically though, 
you will only be able to use this facility with a GHC that supports it, 
so we'll see a lot of source files like

{-# LANGUAGE ... #-}
#if __GLASGOW_HASKELL__ >= 614
{-# LANGUAGE .. more .. #-}

because GHC before 6.14 will stop at the first #if.  (that's assuming we 
implement this for 6.14, it hasn't been done yet)


More information about the Glasgow-haskell-users mailing list