On Fri, Apr 9, 2010 at 6:44 AM, Ivan Lazar Miljenovic <ivan.miljenovic@gmail.com> wrote:

As of 6.12.1, the new -fwarn-unused-do-bind warning is activated with
-Wall.  This is based off a bug report by Neil Mitchell:
http://hackage.haskell.org/trac/ghc/ticket/3263 .

However, does it make sense for this to be turned on with -Wall?

Personally, I find it to be tremendously noisy and unhelpful, and I always edit my .cabal files to turn it off. I think of it as a usability regression.

 
 For
starters, why should this warning apply only to do blocks and not to
explicit usage of >>, etc.?  That is, the following code (as specified
in the above bug report) generates an error:

  do doesFileExist "foo"
     return 1

yet this doesn't:

   doesFileExist "foo" >> return 1

If monadic code is going to return an error, then shouldn't _all_
monadic code do so, and not just those in do blocks?

Secondly, a fair number of packages seem to be disabling this globally;
the packages I know of (from mentions on mailing lists and grepping on
/srv/code/*/*.cabal on code.haskell.org) that have the
-fno-warn-unused-do-bind option being passed to GHC in their .cabal file
include:

* HsOpenCL
* leksah-server
* xmonad (including xmonad-contrib)
* xmobar
* pandoc

My reason for bringing this up is that I'm soon about to release a new
version of my graphviz library, and am debating what to do.  Note that
most of these errors are being caused by usage of a monadic-style of
parsing (before anyone tells me I should be using an Applicative style
instead, polyparse doesn't support Applicative, so I can't) and as such
the "return value" is being evaluated anyway.  The way I see it, I have
4 options:

 1. Do as the error suggests and preface usage of these parser
    combinators with "_ <-".

 2. Use some function of type "(Monad m) => m a -> m ()" instead of doing
    "_ <-".

 3. Duplicate the parser combinators in question so that I have one
    version that returns a value and another that does the main parser
    and then returns (); then use this second combinator in do blocks
    where I don't care about the returned value.

 4. Put "-fno-warn-unused-do-bind" in the .cabal file.

The first two options don't appeal to me as being excessive usage of
boilerplate; the third involves too much code duplication.  However, I
am loath to just go and disable a warning globally.

What does the Haskell community think?  Is -fwarn-unused-do-bind a
worthwhile warning (and code should be updated so as not to cause it to
find anything to warn about)?  Or is it more of a hindrance to be
disabled?

--
Ivan Lazar Miljenovic
Ivan.Miljenovic@gmail.com
IvanMiljenovic.wordpress.com
_______________________________________________