X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=docs%2Fusers_guide%2Fglasgow_exts.xml;h=e5b7154afda20fcff90598624806b7dac300d54d;hb=317da78a27cda0c07fce325953f096453bcef477;hp=dd410c81ba449a7959b12a00845a06b8d317590e;hpb=04e62d08f6681d1c456af9437073db0b3e7d045c;p=ghc-hetmet.git
diff --git a/docs/users_guide/glasgow_exts.xml b/docs/users_guide/glasgow_exts.xml
index dd410c8..e5b7154 100644
--- a/docs/users_guide/glasgow_exts.xml
+++ b/docs/users_guide/glasgow_exts.xml
@@ -244,7 +244,8 @@ documentation describes all the libraries that come with GHC.
Enables Template Haskell (see ). Currently also implied by
+ linkend="template-haskell"/>). This flag must
+ be given explicitly; it is no longer implied by
.Syntax stolen: [|,
@@ -3742,20 +3743,17 @@ Derived instance declarations are constructed as follows. Consider the
declaration (after expansion of any type synonyms)
- newtype T v1...vn = T' (S t1...tk vk+1...vn) deriving (c1...cm)
+ newtype T v1...vn = T' (t vk+1...vn) deriving (c1...cm)
where
- S is a type constructor,
+ The type t is an arbitrary type
- The t1...tk are types,
-
-
- The vk+1...vn are type variables which do not occur in any of
- the ti, and
+ The vk+1...vn are type variables which do not occur in
+ t, and
The ci are partial applications of
@@ -3773,7 +3771,7 @@ where
Then, for each ci, the derived instance
declaration is:
- instance ci (S t1...tk vk+1...v) => ci (T v1...vp)
+ instance ci (t vk+1...v) => ci (T v1...vp)
where p is chosen so that T v1...vp is of the
right kind for the last parameter of class Ci.
@@ -4089,9 +4087,8 @@ Tim Sheard is going to expand it.)
constructions. You need to use the flag
to switch these syntactic extensions on
- ( is currently implied by
- , but you are encouraged to
- specify it explicitly).
+ ( is no longer implied by
+ ).
@@ -5013,63 +5010,58 @@ key_function :: Int -> String -> (Bool, Double)
If you use you'll see the
sequence of phase numbers for successive runs of the
simplifier. In an INLINE pragma you can optionally specify a
- phase number, thus:
-
+ phase number, thus:
- You can say "inline f in Phase 2
- and all subsequent phases":
-
- {-# INLINE [2] f #-}
-
-
-
-
+ "INLINE[k] f" means: do not inline
+ f
+ until phase k, but from phase
+ k onwards be very keen to inline it.
+
- You can say "inline g in all
- phases up to, but not including, Phase 3":
-
- {-# INLINE [~3] g #-}
-
-
-
-
+ "INLINE[~k] f" means: be very keen to inline
+ f
+ until phase k, but from phase
+ k onwards do not inline it.
+
- If you omit the phase indicator, you mean "inline in
- all phases".
-
+ "NOINLINE[k] f" means: do not inline
+ f
+ until phase k, but from phase
+ k onwards be willing to inline it (as if
+ there was no pragma).
+
+
+ "INLINE[~k] f" means: be willing to inline
+ f
+ until phase k, but from phase
+ k onwards do not inline it.
+
-
- You can use a phase number on a NOINLINE pragma too:
-
-
-
- You can say "do not inline f
- until Phase 2; in Phase 2 and subsequently behave as if
- there was no pragma at all":
+The same information is summarised here:
- {-# NOINLINE [2] f #-}
-
-
-
+ -- Before phase 2 Phase 2 and later
+ {-# INLINE [2] f #-} -- No Yes
+ {-# INLINE [~2] f #-} -- Yes No
+ {-# NOINLINE [2] f #-} -- No Maybe
+ {-# NOINLINE [~2] f #-} -- Maybe No
-
- You can say "do not inline g in
- Phase 3 or any subsequent phase; before that, behave as if
- there was no pragma":
-
- {-# NOINLINE [~3] g #-}
+ {-# INLINE f #-} -- Yes Yes
+ {-# NOINLINE f #-} -- No No
-
-
-
-
- If you omit the phase indicator, you mean "never
- inline this function".
-
-
-
- The same phase-numbering control is available for RULES
+By "Maybe" we mean that the usual heuristic inlining rules apply (if the
+function body is small, or it is applied to interesting-looking arguments etc).
+Another way to understand the semantics is this:
+
+For both INLINE and NOINLINE, the phase number says
+when inlining is allowed at all.
+The INLINE pragma has the additional effect of making the
+function body look small, so that when inlining is allowed it is very likely to
+happen.
+
+
+
+The same phase-numbering control is available for RULES
().