X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=docs%2Fusers_guide%2Fusing.xml;h=024a4e786963db7c0e2e3fef87fa9653dc679ffa;hp=478a6bc20e3f7f02d098f3e8642b6c4f72aa23e1;hb=9d0c8f842e35dde3d570580cf62a32779f66a6de;hpb=ab1d5052de53479377c961d1e966f0cf0b82c592 diff --git a/docs/users_guide/using.xml b/docs/users_guide/using.xml index 478a6bc..024a4e7 100644 --- a/docs/users_guide/using.xml +++ b/docs/users_guide/using.xml @@ -845,7 +845,8 @@ ghc -c Foo.hs , , , - , and + , + , and . The following flags are simple ways to select standard “packages” of warnings: @@ -877,7 +878,8 @@ ghc -c Foo.hs , , , - , and + , + , and . @@ -1365,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