#4969: regression: core-lint failure in agda
---------------------------------+------------------------------------------
    Reporter:  igloo             |        Owner:              
        Type:  bug               |       Status:  new         
    Priority:  high              |    Milestone:  7.0.2       
   Component:  Compiler          |      Version:  7.0.1       
    Keywords:                    |     Testcase:              
   Blockedby:                    |   Difficulty:              
          Os:  Unknown/Multiple  |     Blocking:              
Architecture:  Unknown/Multiple  |      Failure:  None/Unknown
---------------------------------+------------------------------------------
 This testcase, boiled down from agda 2.2.8, gives a core lint failure with
 HEAD and 7.0 branch, but not 7.0.1:
 {{{
 {-# LANGUAGE MultiParamTypeClasses, FunctionalDependencies,
              FlexibleContexts, FlexibleInstances,
              OverlappingInstances, UndecidableInstances #-}

 module Q where

 import Control.Monad (foldM)

 data NameId = NameId
 data Named name a = Named
 data Arg e  = Arg

 data Range = Range
 data Name = Name
 data ALetBinding = ALetBinding
 data APattern a = APattern
 data CExpr = CExpr
 data CPattern = CPattern
 data NiceDeclaration = QQ
 data TypeError = NotAValidLetBinding NiceDeclaration
 data TCState = TCSt { stFreshThings :: FreshThings }
 data FreshThings = Fresh

 newtype NewName a = NewName a
 newtype LetDef = LetDef NiceDeclaration
 newtype TCMT m a = TCM ()

 localToAbstract :: ToAbstract c a => c -> (a -> TCMT IO b) -> TCMT IO b
 localToAbstract = undefined

 typeError :: MonadTCM tcm => TypeError -> tcm a
 typeError = undefined

 lhsArgs :: [Arg (Named String CPattern)]
 lhsArgs = undefined

 freshNoName :: (MonadState s m, HasFresh NameId s) => Range -> m Name
 freshNoName = undefined

 class (Monad m) => MonadState s m | m -> s
 class (Monad m) => MonadIO m

 class ToAbstract concrete abstract | concrete -> abstract where
     toAbstract :: concrete -> TCMT IO abstract

 class (MonadState TCState tcm) => MonadTCM tcm where
     liftTCM :: TCMT IO a -> tcm a

 class HasFresh i a where
     nextFresh :: a -> (i,a)

 instance ToAbstract c a => ToAbstract [c] [a] where
 instance ToAbstract c a => ToAbstract (Arg c) (Arg a) where
 instance ToAbstract c a => ToAbstract (Named name c) (Named name a) where
 instance ToAbstract CPattern (APattern CExpr) where

 instance ToAbstract LetDef [ALetBinding] where
     toAbstract (LetDef d) = do _ <- letToAbstract
                                undefined
         where letToAbstract = do
                   localToAbstract lhsArgs $ \args ->
                           foldM lambda undefined undefined
               lambda _ _ = do x <- freshNoName undefined
                               return undefined
               lambda _ _ = typeError $ NotAValidLetBinding d

 instance HasFresh NameId FreshThings where
     nextFresh = undefined

 instance HasFresh i FreshThings => HasFresh i TCState where
     nextFresh = undefined

 instance Monad m => MonadState TCState (TCMT m) where

 instance Monad m => MonadTCM (TCMT m) where
     liftTCM = undefined

 instance Monad (TCMT m) where
     return = undefined
     (>>=) = undefined
     fail = undefined

 instance Monad m => MonadIO (TCMT m) where
 }}}
 {{{
 $ ghc -c q.hs -dcore-lint > out

 <no location info>:
 Compilation had errors

 $ cat out
 *** Core Lint errors : in result of Desugar ***
 <no location info>:
     In the expression: Q.freshNoName
                          @ Q.TCState @ m_akZ $dMonadState_akN
     $dMonadState_akN is out of scope
 <no location info>:
     In the expression: Q.freshNoName
                          @ Q.TCState @ m_akZ $dMonadState_akN
     Argument value doesn't match argument type:
     Fun type:
         (Q.MonadState Q.TCState m_akZ, Q.HasFresh Q.NameId Q.TCState) =>
         Q.Range -> m_akZ Q.Name
     Arg type: Q.MonadState Q.TCState m_r
     Arg: $dMonadState_akN
 *** Offending Program ***
 Q.freshNoName
   :: forall s_adu (m_adv :: * -> *).
      (Q.MonadState s_adu m_adv, Q.HasFresh Q.NameId s_adu) =>
      Q.Range -> m_adv Q.Name
 [LclIdX]
 Q.freshNoName =
   \ (@ s_ajs) (@ m_ajt::* -> *) _ _ ->
     GHC.Err.undefined @ (Q.Range -> m_ajt Q.Name)

 Q.lhsArgs :: [Q.Arg (Q.Named GHC.Base.String Q.CPattern)]
 [LclIdX]
 Q.lhsArgs =
   GHC.Err.undefined @ [Q.Arg (Q.Named GHC.Base.String Q.CPattern)]

 Q.typeError
   :: forall (tcm_adw :: * -> *) a_adx.
      Q.MonadTCM tcm_adw =>
      Q.TypeError -> tcm_adw a_adx
 [LclIdX]
 Q.typeError =
   \ (@ tcm_ajB::* -> *) (@ a_ajC) _ ->
     GHC.Err.undefined @ (Q.TypeError -> tcm_ajB a_ajC)

 Q.localToAbstract
   :: forall c_ady a_adz b_adA.
      Q.ToAbstract c_ady a_adz =>
      c_ady
      -> (a_adz -> Q.TCMT GHC.Types.IO b_adA)
      -> Q.TCMT GHC.Types.IO b_adA
 [LclIdX]
 Q.localToAbstract =
   \ (@ c_ajF) (@ a_ajG) (@ b_ajH) _ ->
     GHC.Err.undefined
       @ (c_ajF
          -> (a_ajG -> Q.TCMT GHC.Types.IO b_ajH)
          -> Q.TCMT GHC.Types.IO b_ajH)

 Q.stFreshThings :: Q.TCState -> Q.FreshThings
 [LclIdX[[RecSel]]]
 Q.stFreshThings =
   \ (ds_dmh :: Q.TCState) ->
     case ds_dmh of _ { Q.TCSt ds_dmi -> ds_dmi }

 Q.$fMonadIOTCMT [InlPrag=INLINE (sat-args=0)]
   :: forall (m_adB :: * -> *).
      (GHC.Base.Monad (Q.TCMT m_adB), GHC.Base.Monad m_adB) =>
      Q.MonadIO (Q.TCMT m_adB)
 [LclIdX[DFunId[1](nt)],
  Unf=Unf{Src=InlineStable, TopLvl=True, Arity=2, Value=True,
          ConLike=True, Cheap=True, Expandable=True,
          Guidance=ALWAYS_IF(unsat_ok=False,boring_ok=True)
          Tmpl= \ (@ m_adB::* -> *)
                  ($dMonad_ajP [Occ=Once] :: GHC.Base.Monad (Q.TCMT m_adB))
                  _ ->
                  Q.D:MonadIO @ (Q.TCMT m_adB) $dMonad_ajP}]
 Q.$fMonadIOTCMT =
   \ (@ m_adB::* -> *)
     ($dMonad_ajP :: GHC.Base.Monad (Q.TCMT m_adB))
     _ ->
     Q.D:MonadIO @ (Q.TCMT m_adB) $dMonad_ajP

 Q.$fMonadStateTCStateTCMT [InlPrag=INLINE (sat-args=0)]
   :: forall (m_adE :: * -> *).
      (GHC.Base.Monad (Q.TCMT m_adE), GHC.Base.Monad m_adE) =>
      Q.MonadState Q.TCState (Q.TCMT m_adE)
 [LclIdX[DFunId[1](nt)],
  Unf=Unf{Src=InlineStable, TopLvl=True, Arity=2, Value=True,
          ConLike=True, Cheap=True, Expandable=True,
          Guidance=ALWAYS_IF(unsat_ok=False,boring_ok=True)
          Tmpl= \ (@ m_adE::* -> *)
                  ($dMonad_akp [Occ=Once] :: GHC.Base.Monad (Q.TCMT m_adE))
                  _ ->
                  Q.D:MonadState @ Q.TCState @ (Q.TCMT m_adE) $dMonad_akp}]
 Q.$fMonadStateTCStateTCMT =
   \ (@ m_adE::* -> *)
     ($dMonad_akp :: GHC.Base.Monad (Q.TCMT m_adE))
     _ ->
     Q.D:MonadState @ Q.TCState @ (Q.TCMT m_adE) $dMonad_akp

 $ctoAbstract_als
   :: forall c_adQ a_adR.
      Q.ToAbstract c_adQ a_adR =>
      [c_adQ] -> Q.TCMT GHC.Types.IO [a_adR]
 [LclId]
 $ctoAbstract_als =
   \ (@ c_adQ) (@ a_adR) _ ->
     Control.Exception.Base.noMethodBindingError
       @ ([c_adQ] -> Q.TCMT GHC.Types.IO [a_adR])
       "q.hs:53:10-45|Q.toAbstract"

 Q.$fToAbstract[][] [InlPrag=INLINE (sat-args=0)]
   :: forall c_adQ a_adR.
      Q.ToAbstract c_adQ a_adR =>
      Q.ToAbstract [c_adQ] [a_adR]
 [LclIdX[DFunId(nt)],
  Unf=Unf{Src=InlineStable, TopLvl=True, Arity=1, Value=True,
          ConLike=True, Cheap=True, Expandable=True,
          Guidance=ALWAYS_IF(unsat_ok=False,boring_ok=False)
          Tmpl= \ (@ c_adQ)
                  (@ a_adR)
                  ($dToAbstract_alr [Occ=Once] :: Q.ToAbstract c_adQ a_adR)
 ->
                  Q.D:ToAbstract
                    @ [c_adQ]
                    @ [a_adR]
                    ($ctoAbstract_als @ c_adQ @ a_adR $dToAbstract_alr)}]
 Q.$fToAbstract[][] =
   \ (@ c_adQ)
     (@ a_adR)
     ($dToAbstract_alr :: Q.ToAbstract c_adQ a_adR) ->
     Q.D:ToAbstract
       @ [c_adQ]
       @ [a_adR]
       ($ctoAbstract_als @ c_adQ @ a_adR $dToAbstract_alr)

 $ctoAbstract_alo
   :: forall c_adO a_adP.
      Q.ToAbstract c_adO a_adP =>
      Q.Arg c_adO -> Q.TCMT GHC.Types.IO (Q.Arg a_adP)
 [LclId]
 $ctoAbstract_alo =
   \ (@ c_adO) (@ a_adP) _ ->
     Control.Exception.Base.noMethodBindingError
       @ (Q.Arg c_adO -> Q.TCMT GHC.Types.IO (Q.Arg a_adP))
       "q.hs:54:10-53|Q.toAbstract"

 Q.$fToAbstractArgArg [InlPrag=INLINE (sat-args=0)]
   :: forall c_adO a_adP.
      Q.ToAbstract c_adO a_adP =>
      Q.ToAbstract (Q.Arg c_adO) (Q.Arg a_adP)
 [LclIdX[DFunId(nt)],
  Unf=Unf{Src=InlineStable, TopLvl=True, Arity=1, Value=True,
          ConLike=True, Cheap=True, Expandable=True,
          Guidance=ALWAYS_IF(unsat_ok=False,boring_ok=False)
          Tmpl= \ (@ c_adO)
                  (@ a_adP)
                  ($dToAbstract_aln [Occ=Once] :: Q.ToAbstract c_adO a_adP)
 ->
                  Q.D:ToAbstract
                    @ (Q.Arg c_adO)
                    @ (Q.Arg a_adP)
                    ($ctoAbstract_alo @ c_adO @ a_adP $dToAbstract_aln)}]
 Q.$fToAbstractArgArg =
   \ (@ c_adO)
     (@ a_adP)
     ($dToAbstract_aln :: Q.ToAbstract c_adO a_adP) ->
     Q.D:ToAbstract
       @ (Q.Arg c_adO)
       @ (Q.Arg a_adP)
       ($ctoAbstract_alo @ c_adO @ a_adP $dToAbstract_aln)

 $ctoAbstract_alk
   :: forall c_adL a_adM name_adN.
      Q.ToAbstract c_adL a_adM =>
      Q.Named name_adN c_adL
      -> Q.TCMT GHC.Types.IO (Q.Named name_adN a_adM)
 [LclId]
 $ctoAbstract_alk =
   \ (@ c_adL) (@ a_adM) (@ name_adN) _ ->
     Control.Exception.Base.noMethodBindingError
       @ (Q.Named name_adN c_adL
          -> Q.TCMT GHC.Types.IO (Q.Named name_adN a_adM))
       "q.hs:55:10-67|Q.toAbstract"

 Q.$fToAbstractNamedNamed [InlPrag=INLINE (sat-args=0)]
   :: forall c_adL a_adM name_adN.
      Q.ToAbstract c_adL a_adM =>
      Q.ToAbstract (Q.Named name_adN c_adL) (Q.Named name_adN a_adM)
 [LclIdX[DFunId(nt)],
  Unf=Unf{Src=InlineStable, TopLvl=True, Arity=1, Value=True,
          ConLike=True, Cheap=True, Expandable=True,
          Guidance=ALWAYS_IF(unsat_ok=False,boring_ok=False)
          Tmpl= \ (@ c_adL)
                  (@ a_adM)
                  (@ name_adN)
                  ($dToAbstract_alj [Occ=Once] :: Q.ToAbstract c_adL a_adM)
 ->
                  Q.D:ToAbstract
                    @ (Q.Named name_adN c_adL)
                    @ (Q.Named name_adN a_adM)
                    ($ctoAbstract_alk @ c_adL @ a_adM @ name_adN
 $dToAbstract_alj)}]
 Q.$fToAbstractNamedNamed =
   \ (@ c_adL)
     (@ a_adM)
     (@ name_adN)
     ($dToAbstract_alj :: Q.ToAbstract c_adL a_adM) ->
     Q.D:ToAbstract
       @ (Q.Named name_adN c_adL)
       @ (Q.Named name_adN a_adM)
       ($ctoAbstract_alk @ c_adL @ a_adM @ name_adN $dToAbstract_alj)

 $ctoAbstract_alg
   :: Q.CPattern -> Q.TCMT GHC.Types.IO (Q.APattern Q.CExpr)
 [LclId]
 $ctoAbstract_alg =
   Control.Exception.Base.noMethodBindingError
     @ (Q.CPattern -> Q.TCMT GHC.Types.IO (Q.APattern Q.CExpr))
     "q.hs:56:10-45|Q.toAbstract"

 Q.$fToAbstractCPatternAPattern [InlPrag=INLINE (sat-args=0)]
   :: Q.ToAbstract Q.CPattern (Q.APattern Q.CExpr)
 [LclIdX[DFunId(nt)],
  Unf=Unf{Src=InlineStable, TopLvl=True, Arity=0, Value=False,
          ConLike=False, Cheap=False, Expandable=False,
          Guidance=ALWAYS_IF(unsat_ok=False,boring_ok=False)
          Tmpl= Q.D:ToAbstract
                  @ Q.CPattern @ (Q.APattern Q.CExpr) $ctoAbstract_alg}]
 Q.$fToAbstractCPatternAPattern =
   Q.D:ToAbstract @ Q.CPattern @ (Q.APattern Q.CExpr) $ctoAbstract_alg

 $dToAbstract_alR
   :: Q.ToAbstract
        (Q.Named GHC.Base.String Q.CPattern)
        (Q.Named GHC.Base.String (Q.APattern Q.CExpr))
 [LclId]
 $dToAbstract_alR =
   Q.$fToAbstractNamedNamed
     @ Q.CPattern
     @ (Q.APattern Q.CExpr)
     @ [GHC.Types.Char]
     Q.$fToAbstractCPatternAPattern

 $dToAbstract_alJ
   :: Q.ToAbstract
        (Q.Arg (Q.Named GHC.Base.String Q.CPattern))
        (Q.Arg (Q.Named GHC.Base.String (Q.APattern Q.CExpr)))
 [LclId]
 $dToAbstract_alJ =
   Q.$fToAbstractArgArg
     @ (Q.Named GHC.Base.String Q.CPattern)
     @ (Q.Named GHC.Base.String (Q.APattern Q.CExpr))
     $dToAbstract_alR

 $dToAbstract_alD
   :: Q.ToAbstract
        [Q.Arg (Q.Named GHC.Base.String Q.CPattern)]
        [Q.Arg (Q.Named GHC.Base.String (Q.APattern Q.CExpr))]
 [LclId]
 $dToAbstract_alD =
   Q.$fToAbstract[][]
     @ (Q.Arg (Q.Named GHC.Base.String Q.CPattern))
     @ (Q.Arg (Q.Named GHC.Base.String (Q.APattern Q.CExpr)))
     $dToAbstract_alJ

 Q.$fHasFreshNameIdFreshThings [InlPrag=INLINE (sat-args=0)]
   :: Q.HasFresh Q.NameId Q.FreshThings
 [LclIdX[DFunId(nt)],
  Unf=Unf{Src=InlineStable, TopLvl=True, Arity=0, Value=False,
          ConLike=False, Cheap=False, Expandable=False,
          Guidance=ALWAYS_IF(unsat_ok=False,boring_ok=False)
          Tmpl= Q.D:HasFresh
                  @ Q.NameId
                  @ Q.FreshThings
                  (GHC.Err.undefined
                     @ (Q.FreshThings -> (Q.NameId, Q.FreshThings)))}]
 Q.$fHasFreshNameIdFreshThings =
   Q.D:HasFresh
     @ Q.NameId
     @ Q.FreshThings
     (GHC.Err.undefined @ (Q.FreshThings -> (Q.NameId, Q.FreshThings)))

 $cnextFresh_aku
   :: forall i_adF.
      Q.HasFresh i_adF Q.FreshThings =>
      Q.TCState -> (i_adF, Q.TCState)
 [LclId]
 $cnextFresh_aku =
   \ (@ i_adF) _ ->
     GHC.Err.undefined @ (Q.TCState -> (i_adF, Q.TCState))

 Q.$fHasFreshiTCState [InlPrag=INLINE (sat-args=0)]
   :: forall i_adF.
      Q.HasFresh i_adF Q.FreshThings =>
      Q.HasFresh i_adF Q.TCState
 [LclIdX[DFunId(nt)],
  Unf=Unf{Src=InlineStable, TopLvl=True, Arity=1, Value=True,
          ConLike=True, Cheap=True, Expandable=True,
          Guidance=ALWAYS_IF(unsat_ok=False,boring_ok=False)
          Tmpl= \ (@ i_adF)
                  ($dHasFresh_akt [Occ=Once] :: Q.HasFresh i_adF
 Q.FreshThings) ->
                  Q.D:HasFresh
                    @ i_adF @ Q.TCState ($cnextFresh_aku @ i_adF
 $dHasFresh_akt)}]
 Q.$fHasFreshiTCState =
   \ (@ i_adF) ($dHasFresh_akt :: Q.HasFresh i_adF Q.FreshThings) ->
     Q.D:HasFresh
       @ i_adF @ Q.TCState ($cnextFresh_aku @ i_adF $dHasFresh_akt)

 $cliftTCM_akk
   :: forall (m_adD :: * -> *).
      (Q.MonadState Q.TCState (Q.TCMT m_adD), GHC.Base.Monad m_adD) =>
      forall a_adh. Q.TCMT GHC.Types.IO a_adh -> Q.TCMT m_adD a_adh
 [LclId]
 $cliftTCM_akk =
   \ (@ m_adD::* -> *) _ _ (@ a_akm) ->
     GHC.Err.undefined
       @ (Q.TCMT GHC.Types.IO a_akm -> Q.TCMT m_adD a_akm)

 Q.$fMonadTCMTCMT [InlPrag=[ALWAYS] CONLIKE]
   :: forall (m_adD :: * -> *).
      (Q.MonadState Q.TCState (Q.TCMT m_adD), GHC.Base.Monad m_adD) =>
      Q.MonadTCM (Q.TCMT m_adD)
 [LclIdX[DFunId[1]],
  Unf=DFun(arity=3) Q.D:MonadTCM [<1>, {$cliftTCM_akk}]]
 Q.$fMonadTCMTCMT =
   \ (@ m_adD::* -> *)
     ($dMonadState_akh :: Q.MonadState Q.TCState (Q.TCMT m_adD))
     ($dMonad_aki :: GHC.Base.Monad m_adD) ->
     Q.D:MonadTCM
       @ (Q.TCMT m_adD)
       $dMonadState_akh
       ($cliftTCM_akk @ m_adD $dMonadState_akh $dMonad_aki)

 Rec {
 Q.$fMonadTCMT [InlPrag=[ALWAYS] CONLIKE]
   :: forall (m_adC :: * -> *). GHC.Base.Monad (Q.TCMT m_adC)
 [LclIdX[DFunId],
  Unf=DFun(arity=1) GHC.Base.D:Monad [{\ (@ m_adC::* -> *)
                                         (@ a_ajX)
                                         (@ b_ajY) ->
                                         GHC.Err.undefined
                                           @ (Q.TCMT m_adC a_ajX
                                              -> (a_ajX -> Q.TCMT m_adC
 b_ajY)
                                              -> Q.TCMT m_adC b_ajY)},
                                      {$c>>_ak1},
                                      {\ (@ m_adC::* -> *) (@ a_ak9) ->
                                         GHC.Err.undefined @ (a_ak9 ->
 Q.TCMT m_adC a_ak9)},
                                      {\ (@ m_adC::* -> *) (@ a_ake) ->
                                         GHC.Err.undefined
                                           @ (GHC.Base.String -> Q.TCMT
 m_adC a_ake)}]]
 Q.$fMonadTCMT =
   \ (@ m_adC::* -> *) ->
     GHC.Base.D:Monad
       @ (Q.TCMT m_adC)
       ((\ (@ m_adC::* -> *) (@ a_ajX) (@ b_ajY) ->
           GHC.Err.undefined
             @ (Q.TCMT m_adC a_ajX
                -> (a_ajX -> Q.TCMT m_adC b_ajY)
                -> Q.TCMT m_adC b_ajY))
          @ m_adC)
       ($c>>_ak1 @ m_adC)
       ((\ (@ m_adC::* -> *) (@ a_ak9) ->
           GHC.Err.undefined @ (a_ak9 -> Q.TCMT m_adC a_ak9))
          @ m_adC)
       ((\ (@ m_adC::* -> *) (@ a_ake) ->
           GHC.Err.undefined @ (GHC.Base.String -> Q.TCMT m_adC a_ake))
          @ m_adC)

 $c>>_ak1 [Occ=LoopBreaker]
   :: forall (m_adC :: * -> *) a_amc b_amd.
      Q.TCMT m_adC a_amc -> Q.TCMT m_adC b_amd -> Q.TCMT m_adC b_amd
 [LclId]
 $c>>_ak1 =
   \ (@ m_adC::* -> *) ->
     GHC.Base.$dm>> @ (Q.TCMT m_adC) (Q.$fMonadTCMT @ m_adC)
 end Rec }

 $dMonadState_alw :: Q.MonadState Q.TCState (Q.TCMT GHC.Types.IO)
 [LclId]
 $dMonadState_alw =
   Q.$fMonadStateTCStateTCMT
     @ GHC.Types.IO (Q.$fMonadTCMT @ GHC.Types.IO) GHC.Base.$fMonadIO

 $dMonadTCM_al8 :: Q.MonadTCM (Q.TCMT GHC.Types.IO)
 [LclId]
 $dMonadTCM_al8 =
   Q.$fMonadTCMTCMT @ GHC.Types.IO $dMonadState_alw GHC.Base.$fMonadIO

 $ctoAbstract_akA :: Q.LetDef -> Q.TCMT GHC.Types.IO [Q.ALetBinding]
 [LclId]
 $ctoAbstract_akA =
   \ _ ->
     let {
       lambda_adI
         :: forall t_akX t_akY (m_akZ :: * -> *) b_al0.
            Q.MonadTCM m_akZ =>
            t_akX -> t_akY -> m_akZ b_al0
       [LclId]
       lambda_adI =
         \ (@ t_akX)
           (@ t_akY)
           (@ m_akZ::* -> *)
           (@ b_al0)
           ($dMonadTCM_al1 :: Q.MonadTCM m_akZ) ->
           let {
             $dHasFresh_akQ :: Q.HasFresh Q.NameId Q.TCState
             [LclId]
             $dHasFresh_akQ =
               Q.$fHasFreshiTCState @ Q.NameId
 Q.$fHasFreshNameIdFreshThings } in
           let {
             $dMonad_akG :: GHC.Base.Monad m_akZ
             [LclId]
             $dMonad_akG =
               Q.$p1MonadState
                 @ Q.TCState @ m_akZ (Q.$p1MonadTCM @ m_akZ $dMonadTCM_al1)
 } in
           \ _ _ ->
             GHC.Base.>>=
               @ m_akZ
               $dMonad_akG
               @ Q.Name
               @ b_al0
               (Q.freshNoName
                  @ Q.TCState
                  @ m_akZ
                  $dMonadState_akN
                  $dHasFresh_akQ
                  (GHC.Err.undefined @ Q.Range))
               (\ _ ->
                  GHC.Base.return
                    @ m_akZ $dMonad_akG @ b_al0 (GHC.Err.undefined @
 b_al0)) } in
     GHC.Base.>>=
       @ (Q.TCMT GHC.Types.IO)
       (Q.$fMonadTCMT @ GHC.Types.IO)
       @ GHC.Prim.Any
       @ [Q.ALetBinding]
       ((\ (@ b_alb) ->
           GHC.Base.$
             @ ([Q.Arg (Q.Named GHC.Base.String (Q.APattern Q.CExpr))]
                -> Q.TCMT GHC.Types.IO b_alb)
             @ (Q.TCMT GHC.Types.IO b_alb)
             (Q.localToAbstract
                @ [Q.Arg (Q.Named GHC.Base.String Q.CPattern)]
                @ [Q.Arg (Q.Named GHC.Base.String (Q.APattern Q.CExpr))]
                @ b_alb
                $dToAbstract_alD
                Q.lhsArgs)
             (\ _ ->
                Control.Monad.foldM
                  @ (Q.TCMT GHC.Types.IO)
                  @ b_alb
                  @ GHC.Prim.Any
                  (Q.$fMonadTCMT @ GHC.Types.IO)
                  (lambda_adI
                     @ b_alb
                     @ GHC.Prim.Any
                     @ (Q.TCMT GHC.Types.IO)
                     @ b_alb
                     $dMonadTCM_al8)
                  (GHC.Err.undefined @ b_alb)
                  (GHC.Err.undefined @ [GHC.Prim.Any])))
          @ GHC.Prim.Any)
       (\ _ -> GHC.Err.undefined @ (Q.TCMT GHC.Types.IO [Q.ALetBinding]))

 Q.$fToAbstractLetDef[] [InlPrag=INLINE (sat-args=0)]
   :: Q.ToAbstract Q.LetDef [Q.ALetBinding]
 [LclIdX[DFunId(nt)],
  Unf=Unf{Src=InlineStable, TopLvl=True, Arity=0, Value=False,
          ConLike=False, Cheap=False, Expandable=False,
          Guidance=ALWAYS_IF(unsat_ok=False,boring_ok=False)
          Tmpl= Q.D:ToAbstract
                  @ Q.LetDef @ [Q.ALetBinding] $ctoAbstract_akA}]
 Q.$fToAbstractLetDef[] =
   Q.D:ToAbstract @ Q.LetDef @ [Q.ALetBinding] $ctoAbstract_akA

 *** End of Offense ***

-- 
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/4969>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler

_______________________________________________
Glasgow-haskell-bugs mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs

Reply via email to