
#8470: "Fix" spurious Unused do-bind warnings ------------------------------------+------------------------------------- Reporter: 2piix | Owner: Type: feature request | Status: new Priority: normal | Milestone: Component: Compiler | Version: 7.6.3 Keywords: | Operating System: Unknown/Multiple Architecture: Unknown/Multiple | Type of failure: None/Unknown Difficulty: Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | ------------------------------------+------------------------------------- I've been writing a lot of monadic code with side effects, and I'm getting a lot of unused do-bind warnings. In particular, consider the contrived example: {{{ performSideEffect :: IO () preformSideEffect = return () someComplicatedIOAction :: a -> IO () someComplicatedIOAction a = do a <- getA performSideEffect putStrLn . show $ a }}} The call to performSideEffect triggers the unused do-bind warning. I can appreciate that we're not binding result of performSideEffect, but we know, by virtue of the type () being a singleton, that there is nothing we can do with the the result. So it "really" doesn't make sense to pull anything out of the action. Fixing the warning with _ <- performSideEffect just adds noise. Would it be possible to turn off the warning in the case that the monad action returns (), or maybe even other singleton types? I'm guessing the latter is harder, and I'd be happy to settle for just (). I don't know enough about GHC's internals to evaluate how hard either would be, though. I know about -fno-warn-unused-do-bind, but it is inconvenient to use in a project that uses -Wall in the Cabal file, which a fairly popular web application framework uses. Even still, catching the legitimate unused do-binds while eliminating these spurious ones would be a nice, noise- lowering addition. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/8470 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler