
#14773: MultiWayIf makes it easy to write partial programs that are not catched by -Wall -------------------------------------+------------------------------------- Reporter: SimonHengel | Owner: (none) Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 8.2.2 Resolution: | Keywords: | PatternMatchWarnings Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by RyanGlScott): On second thought, I was too hasty in my earlier assessment—this might be more tractable than I thought. It turns out that when we're checking patterns from function bindings (as in `program 2` above), we don't directly call `checkMatches`, but instead go through an auxiliary function called [http://git.haskell.org/ghc.git/blob/6edafe3be0133fe69581fb3851a812c69ab9dbf7... matchWrapper]. Instead of taking a list of `LPat`s an an argument, `matchWrapper` takes a `MatchGroup`, and sets up the necessary scaffolding to feed that into `checkMatches`. Now, we can't directly feel an `HsMultiIf`'s guards into `matchWrapper`, since `HsMultiIf` has an `LGRHS` instead of a `MatchGroup`. However, if we look at the definition of `MatchGroup` (and `(L)Match`): {{{#!hs data MatchGroup p body = MG { mg_alts :: Located [LMatch p body] , mg_arg_tys :: [PostTc p Type] , mg_res_ty :: PostTc p Type , mg_origin :: Origin } type LMatch id body = Located (Match id body) data Match p body = Match { m_ctxt :: HsMatchContext (NameOrRdrName (IdP p)), m_pats :: [LPat p], -- The patterns m_grhss :: (GRHSs p body) } }}} We can see that we're actually very close to having what we need, since we can slide the `GRHS` right into a `Match`, and put that into the `mg_alts` of a `MatchGroup`. The trick is to then come up with suitable things to put in the remaining fields of `MatchGroup` and `Match`. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/14773#comment:7 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler