
#14569: refutable let bindings produce "irrefutable pattern failed" errors -------------------------------------+------------------------------------- Reporter: int-e | Owner: (none) Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 8.2.1 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: Type of failure: Poor/confusing | Unknown/Multiple error message | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by simonpj): I rather agree. Actually even 7.10 had this behaviour. Try {{{ main = let [x] = [] in print (x::Int) }}} and you get the runtime crash (with 7.10) {{{ run: T14569.hs:3:12-19: Irrefutable pattern failed for pattern [x] }}} The real point is: this talk of "irrefutable" patterns is confusing, especially since this one is manifestly refutable. Suggestion: uniformly replace the "Irrefutable pattern failed" message with "Non-exhaustive patterns in pattern binding". To do this * Kill off `Control.Exception.Base.irrefutPatError` * Kill off `MkCore.iRREFUT_PAT_ERROR_ID` and its `Name`, unique, etc. * Use `pAT_ERROR_ID` wherever we currently use `iRREFUT_PAT_ERROR_ID`. Ben, if everyone is happy, would you like to execute on this? -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/14569#comment:1 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler