Integrate LanguagePragma
authorSimon Marlow <marlowsd@gmail.com>
Wed, 28 Apr 2010 13:55:07 +0000 (13:55 +0000)
committerSimon Marlow <marlowsd@gmail.com>
Wed, 28 Apr 2010 13:55:07 +0000 (13:55 +0000)
report/pragmas.verb

index 2473ec1..034c376 100644 (file)
@@ -7,13 +7,16 @@
 \label{pragmas}
 \index{pragmas}
 
-Some compiler implementations support compiler {\em pragmas}, which are
-used to give additional instructions or hints to the compiler, but which
-do not form part of the \Haskell{} language proper and do not change a
-program's semantics.  This
-chapter summarizes this existing practice.  An implementation is not
-required to respect any pragma, but the pragma should be ignored if an
-implementation is not prepared to handle it.  
+Some compiler implementations support compiler {\em pragmas}, which
+are used to give additional instructions or hints to the compiler, but
+which do not form part of the \Haskell{} language proper and do not
+change a program's semantics.  This chapter summarizes this existing
+practice.  An implementation is not required to respect any pragma,
+although pragmas that are not recognised by the implementation should
+be ignored.  \hprime{Implementations are strongly encouraged to support the
+LANGUAGE pragma described below as there are many language extensions
+being used in practice.}
+
 Lexically, pragmas appear as comments, except that the enclosing
 syntax is @{-#@ @#-}@.
 
@@ -58,5 +61,47 @@ parameter is either @Int@ or @Integer@ will
 use specialized versions of @factorial@ which do not involve
 overloaded numeric operations.
 
+\subsection{Language extensions}
+
+\begin{haskellprime}
+
+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:
+\bprog
+@
+{-# LANGUAGE ForeignFunctionInterface, CPP #-}
+@
+\eprog
+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 that
+support the @LANGUAGE@ pragma are required to support
+\bprog
+@
+{-# LANGUAGE Haskell2010 #-}
+@
+\eprog
+Those implementations are also encouraged to support the following
+named language extensions: @DoAndIfThenElse@, @HierarchicalModules@,
+@FixityResolution@, @PatternGuards@, @NoNPlusKPatterns@,
+@RelaxedDependencyAnalysis@, @LineCommentSyntax@, @EmptyDataDeclarations@,
+@LanguagePragma@ and @ForeignFunctionInterface@. These are the named
+language extensions, supported by some pre-Haskell 2010
+implementations, that have been integrated into this report.
+
+\end{haskellprime}
 
 %**~footer