
#11527: Pattern match translation suboptimal -------------------------------------+------------------------------------- Reporter: augustss | Owner: Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 7.8.3 Keywords: | Operating System: Unknown/Multiple Architecture: | Type of failure: None/Unknown Unknown/Multiple | Test Case: | Blocked By: Blocking: | Related Tickets: Differential Rev(s): | Wiki Page: -------------------------------------+------------------------------------- Compile the following code and look at the (sad) intermediate code: {{{ baz :: Integer -> Int -> Int baz 10 1 = 1 baz 20 1 = 2 baz 10 2 = 2 baz 20 2 = 3 baz 10 3 = 1 baz 20 3 = 2 baz 10 4 = 2 baz 20 4 = 3 baz _ _ = 0 }}} The pattern match compiler has not rearranged the clauses, and so it produces an 8 level deep nested test. Now change the type signature to {{{ baz :: Int -> Int -> Int }}} Now the pattern match compiler does its job and rearranges the clauses to make the tests 2 levels deep. The same phenomenon happens when matching string literals. For the predefined String type the right thing happens, but for some other string type (using OverloadedStrings) it doesn't. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/11527 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler