... | ... | @@ -32,12 +32,18 @@ |
|
|
## Summary
|
|
|
|
|
|
|
|
|
Document the minimum guarantees provided by the LANGUAGE pragma so that Haskell 2010 users can reliably use it to portable control access to non-Haskell 2010 language features.
|
|
|
Document the minimum guarantees provided by the LANGUAGE pragma.
|
|
|
|
|
|
## Description
|
|
|
|
|
|
|
|
|
To-be-completed.
|
|
|
GHC and Cabal (via Language.Haskell.Extension) have been successfully using the LANGUAGE pragma for the following two purposes:
|
|
|
|
|
|
1. Document the post-Haskell98 language extensions a source file requires.
|
|
|
1. Locally enable those required language extensions when compiling an extension-using source file.
|
|
|
|
|
|
|
|
|
The goal of this proposal is to specify the minimum guarantees provided LANGUAGE pragma so that it can be used portably for those same purposes across Haskell 2010 implementations.
|
|
|
|
|
|
## References
|
|
|
|
... | ... | @@ -71,4 +77,19 @@ Add the following subsection |
|
|
**11.3 Language Extensions**
|
|
|
|
|
|
|
|
|
\<to-be-completed\> |
|
|
The LANGUAGE pragma is a file-header pragma. A file-header pragma must precede the module keyword in a source file. There can be as many file-header pragmas as you please, and they can be preceded or followed by comments. An individual language pragma begins with the keyword LANGUAGE and is followed by a comma-separated list of named language extensions.
|
|
|
|
|
|
|
|
|
For example, to enable the FFI and preprocessing with CPP:
|
|
|
|
|
|
|
|
|
{-\# LANGUAGE [ForeignFunctionInterface](foreign-function-interface), CPP \#-}
|
|
|
|
|
|
|
|
|
If a Haskell implementation does not recognize or support a particular language extension that a source file requests (or cannot support the combination of language extensions requested), any attempt to compile or otherwise use that file with that Haskell implementation must fail with an error.
|
|
|
|
|
|
|
|
|
In the interests of portability, multiple attempts to enable the same, supported language features (e.g. via command-line arguments, implementation-specific extension dependencies or non-standard pragmas) are specifically permitted.
|
|
|
|
|
|
|
|
|
Haskell 2010 implementations are required to support {-\# LANGUAGE Haskell2010 -\#}. {-\# LANGUAGE Haskell2010 -\#} implies support for the following named language extensions standardized in Haskell 2010 (and recognized by pre-Haskell 2010 compilers): {-\# LANGUAGE [PatternGuards](pattern-guards) -\#}, {-\# LANGUAGE [EmptyDataDecls](empty-data-decls) \#-}, {-\# LANGUAGE [ForeignFunctionInterface](foreign-function-interface) \#-}, … |