[GHC] #13242: Panic "StgCmmEnv: variable not found" with ApplicativeDo and ExistentialQuantification

GHC ghc-devs at haskell.org
Sat Feb 11 10:57:18 UTC 2017


#13242: Panic "StgCmmEnv: variable not found" with ApplicativeDo and
ExistentialQuantification
-------------------------------------+-------------------------------------
        Reporter:  ljli              |                Owner:  simonmar
            Type:  bug               |               Status:  new
        Priority:  highest           |            Milestone:  8.0.3
       Component:  Compiler          |              Version:  8.1
      Resolution:                    |             Keywords:
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 simonmar):

 @simonpj I've investigated this and run into something I don't understand,
 can you help?  When we typecheck the above program without `ApplicativeDo`
 we get

 {{{
 AbsBindsSig [] []
   {Exported type: st :: IO ()
                   [LclId]
    Bind: st_aNk
            = do A{a_aNN
                   EvBinds{[W] $dMonad_aNP = $dMonad_aNw
                           [W] $dMonad_aNU = $dMonad_aNw
                           [W] $dMonad_aZe = $dMonad_aNw
                           [W] $dNum_aZc = GHC.Num.$fNumInteger @[] []}} _
 <- pure @ IO
 $dApplicative_aNK
 @ A
 (A @ Bool True)
                 x_aCp <- return @ IO $dMonad_aNU @ Integer 1
                 return @ IO $dMonad_aZe @ () ()
    Evidence: EvBinds{}}
 }}}

 Note that `$dMonad_aNU`, used in the second statement, is bound by the
 `EvBinds` in the (existential) pattern in the first statement.
 ApplicativeDo isn't expecting there to be any dependencies between the two
 patterns, which is why it produces invalid Core.

 I don't understand why we're putting these dict bindings in the first
 pattern, they don't seem to relate to the existential type.  I could just
 disable ApplicativeDo for existential patterns, but if that's necessary
 I'd like to understand why.

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/13242#comment:4>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list