X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=docs%2Fusers_guide%2Fusing.xml;h=024a4e786963db7c0e2e3fef87fa9653dc679ffa;hp=8b876204ece31167c7ccce065d0a03d622ead402;hb=9d0c8f842e35dde3d570580cf62a32779f66a6de;hpb=058b5c20ba7bb3adc4f130ff24893c13941eca4d
diff --git a/docs/users_guide/using.xml b/docs/users_guide/using.xml
index 8b87620..024a4e7 100644
--- a/docs/users_guide/using.xml
+++ b/docs/users_guide/using.xml
@@ -844,7 +844,9 @@ ghc -c Foo.hs
,
,
,
- , and
+ ,
+ ,
+ , and
. The following
flags are
simple ways to select standard “packages” of warnings:
@@ -876,7 +878,8 @@ ghc -c Foo.hs
,
,
,
- , and
+ ,
+ , and
.
@@ -992,7 +995,7 @@ foreign import "&f" f :: FunPtr t
- Causes a warning to be emitted when a a datatype
+ Causes a warning to be emitted when a datatype
T is imported
with all constructors, i.e. T(..), but has been
exported abstractly, i.e. T.
@@ -1000,6 +1003,20 @@ foreign import "&f" f :: FunPtr t
+ :
+
+
+
+ Causes a warning to be emitted when an unlifted type
+ is bound in a way that looks lazy, e.g.
+ where (I# x) = .... Use
+ where !(I# x) = ... instead. This will be an
+ error, rather than a warning, in GHC 6.14.
+
+
+
+
+ :
@@ -1175,6 +1192,11 @@ f foo = foo { x = 6 }
typographical errors that turn into hard-to-find bugs, e.g.,
in the inadvertent capture of what would be a recursive call in
f = ... let f = id in ... f ....
+ The warning is suppressed for names beginning with an underscore. For example
+
+ f x = do { _ignore <- this; _ignore <- that; return (the other) }
+
+
@@ -1345,6 +1367,56 @@ f "2" = 2
+
+ :
+
+
+ unused do binding, warning
+ do binding, unused
+
+ Report expressions occuring in do and mdo blocks
+ that appear to silently throw information away.
+ For instance do { mapM popInt xs ; return 10 } would report
+ the first statement in the do block as suspicious,
+ as it has the type StackM [Int] and not StackM (), but that
+ [Int] value is not bound to anything. The warning is suppressed by
+ explicitly mentioning in the source code that your program is throwing something away:
+
+ do { _ <- mapM popInt xs ; return 10 }
+
+ Of course, in this particular situation you can do even better:
+
+ do { mapM_ popInt xs ; return 10 }
+
+
+
+
+
+
+ :
+
+
+ apparently erroneous do binding, warning
+ do binding, apparently erroneous
+
+ Report expressions occuring in do and mdo blocks
+ that appear to lack a binding.
+ For instance do { return (popInt 10) ; return 10 } would report
+ the first statement in the do block as suspicious,
+ as it has the type StackM (StackM Int) (which consists of two nested applications
+ of the same monad constructor), but which is not then "unpacked" by binding the result.
+ The warning is suppressed by explicitly mentioning in the source code that your program is throwing something away:
+
+ do { _ <- return (popInt 10) ; return 10 }
+
+ For almost all sensible programs this will indicate a bug, and you probably intended to write:
+
+ do { popInt 10 ; return 10 }
+
+
+
+
+
If you're feeling really paranoid, the