[GHC] #14519: Exponential runtime performance regression in GHC 8.2 + Data.Text.Lazy + Text.RE.TDFA

GHC ghc-devs at haskell.org
Thu Jan 11 20:10:51 UTC 2018


#14519: Exponential runtime performance regression in GHC 8.2 + Data.Text.Lazy +
Text.RE.TDFA
-------------------------------------+-------------------------------------
        Reporter:  ntc2              |                Owner:  tdammers
            Type:  bug               |               Status:  new
        Priority:  normal            |            Milestone:  8.4.1
       Component:  Compiler          |              Version:  8.2.2
      Resolution:                    |             Keywords:
Operating System:  Unknown/Multiple  |         Architecture:
                                     |  Unknown/Multiple
 Type of failure:  Runtime           |            Test Case:
  performance bug                    |  https://github.com/ntc2/ghc-8.2.1
                                     |  -regex-lazy-text-
                                     |  bug/tree/07b7bb32c6e90e8f2d2eada4b59943f37e632d53
      Blocked By:                    |             Blocking:
 Related Tickets:  #13745, #14564    |  Differential Rev(s):
       Wiki Page:                    |
-------------------------------------+-------------------------------------

Comment (by tdammers):

 Recompiled everything, with `--force-reinstalls` and `-fforce-recomp`, and
 `-ddump-stg` on everything including dependencies, however, grepping the
 entire project tree for `wnext` only matches binaries (`.o`, `.a` and the
 like), but none of the dumps.

 So I ran GHC directly on the source file inside the cabal tree:

 {{{
 ../ghc/inplace/bin/ghc-stage2 regex-tdfa-
 text-1.0.0.3/Text/Regex/TDFA/Text/Lazy.hs -fforce-recomp -package-db
 .cabal-sandbox/x86_64-linux-ghc-8.5.20180108-packages.conf.d -ticky -c
 -ddump-stg -rtsopts -XMultiParamTypeClasses
 }}}

 But to no avail, `wnext2` does not appear in the STG dump:

 {{{

 ==================== Pre unarise: ====================
 sat_s6o2 :: GHC.Types.Int -> GHC.Int.Int64
 [LclId] =
     [] \u [] GHC.Enum.toEnum GHC.Int.$fEnumInt64;

 $cafter_r6mQ
   :: GHC.Types.Int
      -> Data.Text.Internal.Lazy.Text -> Data.Text.Internal.Lazy.Text
 [GblId] =
     [] \u [] GHC.Base.. Data.Text.Lazy.drop sat_s6o2;

 sat_s6o3 :: GHC.Types.Int -> GHC.Int.Int64
 [LclId] =
     [] \u [] GHC.Enum.toEnum GHC.Int.$fEnumInt64;

 $cbefore_r6nJ
   :: GHC.Types.Int
      -> Data.Text.Internal.Lazy.Text -> Data.Text.Internal.Lazy.Text
 [GblId] =
     [] \u [] GHC.Base.. Data.Text.Lazy.take sat_s6o3;

 Text.Regex.TDFA.Text.Lazy.$fExtractText [InlPrag=NOUSERINLINE CONLIKE]
   :: Text.Regex.Base.RegexLike.Extract Data.Text.Internal.Lazy.Text
 [GblId[DFunId]] =
     NO_CCS Text.Regex.Base.RegexLike.C:Extract! [$cbefore_r6nJ
                                                  $cafter_r6mQ
 Data.Text.Internal.Lazy.empty
                                                  $cextract_r6nK];
 $cextract_r6nK
   :: (GHC.Types.Int, GHC.Types.Int)
      -> Data.Text.Internal.Lazy.Text -> Data.Text.Internal.Lazy.Text
 [GblId] =
     [] \u []
         Text.Regex.Base.RegexLike.$dmextract
             Text.Regex.TDFA.Text.Lazy.$fExtractText;

 Text.Regex.TDFA.Text.Lazy.$fUnconsText [InlPrag=INLINE (sat-args=0)]
   :: Text.Regex.TDFA.NewDFA.Uncons.Uncons
        Data.Text.Internal.Lazy.Text
 [GblId[DFunId(nt)]] =
     [] \u [] Data.Text.Lazy.uncons;

 $cmakeRegexOptsM_r6nL
   :: forall (m :: * -> *).
      GHC.Base.Monad m =>
      Text.Regex.TDFA.Common.CompOption
      -> Text.Regex.TDFA.Common.ExecOption
      -> Data.Text.Internal.Lazy.Text
      -> m Text.Regex.TDFA.Common.Regex
 [GblId, Arity=4, Unf=OtherCon []] =
     [] \r [$dMonad_s6o4 c_s6o5 e_s6o6 source_s6o7]
         let {
           sat_s6o8 [Occ=Once] :: GHC.Base.String
           [LclId] =
               [source_s6o7] \u [] Data.Text.Lazy.unpack source_s6o7;
         } in
           Text.Regex.Base.RegexLike.makeRegexOptsM
 Text.Regex.TDFA.String.$fRegexMakerRegexCompOptionExecOption[]
               $dMonad_s6o4
               c_s6o5
               e_s6o6
               sat_s6o8;

 Text.Regex.TDFA.Text.Lazy.$fRegexMakerRegexCompOptionExecOptionText
 [InlPrag=NOUSERINLINE CONLIKE]
   :: Text.Regex.Base.RegexLike.RegexMaker
        Text.Regex.TDFA.Common.Regex
        Text.Regex.TDFA.Common.CompOption
        Text.Regex.TDFA.Common.ExecOption
        Data.Text.Internal.Lazy.Text
 [GblId[DFunId]] =
     NO_CCS Text.Regex.Base.RegexLike.C:RegexMaker!
 [Text.Regex.TDFA.Common.$fRegexOptionsRegexCompOptionExecOption
                                                     $cmakeRegex_r6nN
                                                     $cmakeRegexOpts_r6nM
                                                     $cmakeRegexM_r6nO
 $cmakeRegexOptsM_r6nL];
 $cmakeRegexOpts_r6nM
   :: Text.Regex.TDFA.Common.CompOption
      -> Text.Regex.TDFA.Common.ExecOption
      -> Data.Text.Internal.Lazy.Text
      -> Text.Regex.TDFA.Common.Regex
 [GblId] =
     [] \u []
         Text.Regex.Base.RegexLike.$dmmakeRegexOpts
 Text.Regex.TDFA.Text.Lazy.$fRegexMakerRegexCompOptionExecOptionText;
 $cmakeRegex_r6nN
   :: Data.Text.Internal.Lazy.Text -> Text.Regex.TDFA.Common.Regex
 [GblId] =
     [] \u []
         Text.Regex.Base.RegexLike.$dmmakeRegex
 Text.Regex.TDFA.Text.Lazy.$fRegexMakerRegexCompOptionExecOptionText;
 $cmakeRegexM_r6nO
   :: forall (m :: * -> *).
      GHC.Base.Monad m =>
      Data.Text.Internal.Lazy.Text -> m Text.Regex.TDFA.Common.Regex
 [GblId, Arity=1, Unf=OtherCon []] =
     [] \r [$dMonad_s6o9]
         Text.Regex.Base.RegexLike.$dmmakeRegexM
 Text.Regex.TDFA.Text.Lazy.$fRegexMakerRegexCompOptionExecOptionText
             $dMonad_s6o9;

 $trModule1_r6nP :: GHC.Prim.Addr#
 [GblId, Caf=NoCafRefs, Unf=OtherCon []] =
     "main"#;

 $trModule2_r6nQ :: GHC.Types.TrName
 [GblId, Caf=NoCafRefs, Unf=OtherCon []] =
     NO_CCS GHC.Types.TrNameS! [$trModule1_r6nP];

 $trModule3_r6nR :: GHC.Prim.Addr#
 [GblId, Caf=NoCafRefs, Unf=OtherCon []] =
     "Text.Regex.TDFA.Text.Lazy"#;

 $trModule4_r6nS :: GHC.Types.TrName
 [GblId, Caf=NoCafRefs, Unf=OtherCon []] =
     NO_CCS GHC.Types.TrNameS! [$trModule3_r6nR];

 Text.Regex.TDFA.Text.Lazy.$trModule :: GHC.Types.Module
 [GblId, Caf=NoCafRefs, Unf=OtherCon []] =
     NO_CCS GHC.Types.Module! [$trModule2_r6nQ $trModule4_r6nS];

 $cmatchTest_r6nT
   :: Text.Regex.TDFA.Common.Regex
      -> Data.Text.Internal.Lazy.Text -> GHC.Types.Bool
 [GblId] =
     [] \u []
         Text.Regex.TDFA.NewDFA.Tester.matchTest Data.Text.Lazy.uncons;

 $cmatchAll_r6nU
   :: Text.Regex.TDFA.Common.Regex
      -> Data.Text.Internal.Lazy.Text
      -> [Text.Regex.Base.RegexLike.MatchArray]
 [GblId, Arity=2, Unf=OtherCon []] =
     [] \r [r_s6oa s_s6ob]
         let {
           sat_s6od [Occ=Once] :: GHC.Types.Char
           [LclId] =
               NO_CCS GHC.Types.C#! ['\n'#]; } in
         let {
           sat_s6oc [Occ=Once] :: Text.Regex.TDFA.Common.Position
           [LclId] =
               NO_CCS GHC.Types.I#! [0#];
         } in
           Text.Regex.TDFA.NewDFA.Engine.execMatch
               Data.Text.Lazy.uncons r_s6oa sat_s6oc sat_s6od s_s6ob;

 Text.Regex.TDFA.Text.Lazy.compile
   :: Text.Regex.TDFA.Common.CompOption
      -> Text.Regex.TDFA.Common.ExecOption
      -> Data.Text.Internal.Lazy.Text
      -> Data.Either.Either GHC.Base.String Text.Regex.TDFA.Common.Regex
 [GblId, Arity=3, Unf=OtherCon []] =
     [] \r [compOpt_s6oe execOpt_s6of txt_s6og]
         let {
           sat_s6oh [Occ=Once] :: GHC.Base.String
           [LclId] =
               [txt_s6og] \u [] Data.Text.Lazy.unpack txt_s6og;
         } in
           case Text.Regex.TDFA.ReadRegex.parseRegex sat_s6oh of {
             Data.Either.Left err_s6oj [Occ=Once] ->
                 let {
                   sat_s6om [Occ=Once] :: [GHC.Types.Char]
                   [LclId] =
                       [err_s6oj] \u []
                           let {
                             sat_s6ol [Occ=Once] :: [GHC.Types.Char]
                             [LclId] =
                                 [err_s6oj] \u []
                                     GHC.Show.show
 Text.Parsec.Error.$fShowParseError err_s6oj; } in
                           let {
                             sat_s6ok [Occ=Once] :: [GHC.Types.Char]
                             [LclId] =
                                 [] \u []
                                     GHC.CString.unpackCString#
                                         "parseRegex for
 Text.Regex.TDFA.Text.Lazy failed:"#;
                           } in  GHC.Base.++ sat_s6ok sat_s6ol;
                 } in  Data.Either.Left [sat_s6om];
             Data.Either.Right pattern_s6on [Occ=Once] ->
                 let {
                   sat_s6oo [Occ=Once] :: Text.Regex.TDFA.Common.Regex
                   [LclId] =
                       [compOpt_s6oe execOpt_s6of pattern_s6on] \u []
                           Text.Regex.TDFA.TDFA.patternToRegex
                               pattern_s6on compOpt_s6oe execOpt_s6of;
                 } in  Data.Either.Right [sat_s6oo];
           };

 $cmatchOnce_r6nV
   :: Text.Regex.TDFA.Common.Regex
      -> Data.Text.Internal.Lazy.Text
      -> GHC.Base.Maybe Text.Regex.Base.RegexLike.MatchArray
 [GblId, Arity=2, Unf=OtherCon []] =
     [] \r [r_s6op s_s6oq]
         let {
           sat_s6or [Occ=Once] :: [Text.Regex.Base.RegexLike.MatchArray]
           [LclId] =
               [r_s6op s_s6oq] \u [] $cmatchAll_r6nU r_s6op s_s6oq;
         } in  Data.Maybe.listToMaybe sat_s6or;

 $cmatchAllText_r6nW
   :: Text.Regex.TDFA.Common.Regex
      -> Data.Text.Internal.Lazy.Text
      -> [Text.Regex.Base.RegexLike.MatchText
            Data.Text.Internal.Lazy.Text]
 [GblId, Arity=2, Unf=OtherCon []] =
     [] \r [regex_s6os source_s6ot]
         let {
           go_s6ou [Occ=LoopBreaker]
             :: GHC.Types.Int
                -> Data.Text.Internal.Lazy.Text
                -> [GHC.Arr.Array GHC.Types.Int (GHC.Types.Int,
 GHC.Types.Int)]
                -> [GHC.Arr.Array
                      GHC.Types.Int
                      (Data.Text.Internal.Lazy.Text, (GHC.Types.Int,
 GHC.Types.Int))]
           [LclId, Arity=3, Unf=OtherCon []] =
               sat-only [go_s6ou] \r [i_s6ov ds_s6ow ds1_s6ox]
                   case i_s6ov of i1_s6oy {
                     GHC.Types.I# _ [Occ=Dead] ->
                         case ds1_s6ox of {
                           [] -> [] [];
                           : x_s6oB xs_s6oC [Occ=Once] ->
                               let {
                                 ds2_s6oD :: (GHC.Types.Int, GHC.Types.Int)
                                 [LclId] =
                                     [x_s6oB] \u []
                                         let {
                                           sat_s6oE [Occ=Once] ::
 GHC.Types.Int
                                           [LclId] =
                                               NO_CCS GHC.Types.I#! [0#];
                                         } in
                                           Data.Array.Base.!
 Data.Array.Base.$fIArrayArraye
                                               GHC.Arr.$fIxInt
                                               x_s6oB
                                               sat_s6oE; } in
                               let {
                                 off0_s6oF :: GHC.Types.Int
                                 [LclId] =
                                     [ds2_s6oD] \u []
                                         case ds2_s6oD of {
                                           (,) off1_s6oH [Occ=Once] _
 [Occ=Dead] -> off1_s6oH;
                                         }; } in
                               let {
                                 len0_s6oJ :: GHC.Types.Int
                                 [LclId] =
                                     [ds2_s6oD] \u []
                                         case ds2_s6oD of {
                                           (,) _ [Occ=Dead] len1_s6oM
 [Occ=Once] -> len1_s6oM;
                                         }; } in
                               let {
                                 sat_s6p0 [Occ=Once]
                                   :: [GHC.Arr.Array
                                         GHC.Types.Int
                                         (Data.Text.Internal.Lazy.Text,
                                          (GHC.Types.Int, GHC.Types.Int))]
                                 [LclId] =
                                     [go_s6ou ds_s6ow i1_s6oy xs_s6oC
 off0_s6oF len0_s6oJ] \u []
                                         let {
                                           sat_s6oX [Occ=Once] ::
 GHC.Types.Int
                                           [LclId] =
                                               [i1_s6oy off0_s6oF
 len0_s6oJ] \u []
                                                   let {
                                                     sat_s6oW [Occ=Once] ::
 GHC.Types.Int
                                                     [LclId] =
                                                         [i1_s6oy
 len0_s6oJ] \u []
                                                             GHC.Num.-
 GHC.Num.$fNumInt len0_s6oJ i1_s6oy;
                                                   } in
                                                     GHC.Num.+
 GHC.Num.$fNumInt off0_s6oF sat_s6oW;
                                         } in
                                           case $cafter_r6mQ sat_s6oX
 ds_s6ow of t'_s6oY {
                                             __DEFAULT ->
                                                 let {
                                                   sat_s6oZ [Occ=Once] ::
 GHC.Types.Int
                                                   [LclId] =
                                                       [off0_s6oF
 len0_s6oJ] \u []
                                                           GHC.Num.+
 GHC.Num.$fNumInt off0_s6oF len0_s6oJ;
                                                 } in  go_s6ou sat_s6oZ
 t'_s6oY xs_s6oC;
                                           }; } in
                               let {
                                 sat_s6oV [Occ=Once]
                                   :: GHC.Arr.Array
                                        GHC.Types.Int
                                        (Data.Text.Internal.Lazy.Text,
                                         (GHC.Types.Int, GHC.Types.Int))
                                 [LclId] =
                                     [ds_s6ow i1_s6oy x_s6oB] \u []
                                         let {
                                           sat_s6oU [Occ=Once]
                                             :: (GHC.Types.Int,
 GHC.Types.Int)
                                                ->
 (Data.Text.Internal.Lazy.Text,
                                                    (GHC.Types.Int,
 GHC.Types.Int))
                                           [LclId] =
                                               [ds_s6ow i1_s6oy] \r
 [pair_s6oN]
                                                   case pair_s6oN of
 wild1_s6oO {
                                                     (,) off_s6oP
 [Occ=Once] len_s6oQ [Occ=Once] ->
                                                         let {
                                                           sat_s6oT
 [Occ=Once]
                                                             ::
 Data.Text.Internal.Lazy.Text
                                                           [LclId] =
                                                               [ds_s6ow
                                                                i1_s6oy
                                                                off_s6oP
                                                                len_s6oQ]
 \u []
                                                                   let {
 sat_s6oR [Occ=Once]
                                                                       ::
 GHC.Types.Int
 [LclId] =
 [i1_s6oy off_s6oP] \u []
 GHC.Num.-
 GHC.Num.$fNumInt
 off_s6oP
 i1_s6oy; } in
                                                                   let {
 sat_s6oS [Occ=Once]
                                                                       ::
 (GHC.Types.Int,
 GHC.Types.Int)
 [LclId] =
 NO_CCS (,)! [sat_s6oR
 len_s6oQ];
                                                                   } in
 $cextract_r6nK sat_s6oS ds_s6ow;
                                                         } in  (,)
 [sat_s6oT wild1_s6oO];
                                                   };
                                         } in  GHC.Base.fmap
 GHC.Arr.$fFunctorArray sat_s6oU x_s6oB;
                               } in  : [sat_s6oV sat_s6p0];
                         };
                   }; } in
         let {
           sat_s6p2 [Occ=Once]
             :: [GHC.Arr.Array GHC.Types.Int (GHC.Types.Int,
 GHC.Types.Int)]
           [LclId] =
               [regex_s6os source_s6ot] \u []
                   $cmatchAll_r6nU regex_s6os source_s6ot; } in
         let {
           sat_s6p1 [Occ=Once] :: GHC.Types.Int
           [LclId] =
               NO_CCS GHC.Types.I#! [0#];
         } in  go_s6ou sat_s6p1 source_s6ot sat_s6p2;

 $cmatchCount_r6nX
   :: Text.Regex.TDFA.Common.Regex
      -> Data.Text.Internal.Lazy.Text -> GHC.Types.Int
 [GblId, Arity=2, Unf=OtherCon []] =
     [] \r [r_s6p3 s_s6p4]
         let {
           sat_s6pm [Occ=Once] :: [Text.Regex.Base.RegexLike.MatchArray]
           [LclId] =
               [r_s6p3 s_s6p4] \u []
                   let {
                     sat_s6pl [Occ=Once] :: GHC.Types.Char
                     [LclId] =
                         NO_CCS GHC.Types.C#! ['\n'#]; } in
                   let {
                     sat_s6pk [Occ=Once] :: Text.Regex.TDFA.Common.Position
                     [LclId] =
                         NO_CCS GHC.Types.I#! [0#]; } in
                   let {
                     sat_s6pj [Occ=Once] :: Text.Regex.TDFA.Common.Regex
                     [LclId] =
                         [r_s6p3] \u []
                             case r_s6p3 of wild_s6p5 {
                               Text.Regex.TDFA.Common.Regex ds_s6p6
 [Occ=Once]
                                                            ds1_s6p7
 [Occ=Once]
                                                            ds2_s6p8
 [Occ=Once]
                                                            ds3_s6p9
 [Occ=Once]
                                                            ds4_s6pa
 [Occ=Once]
                                                            ds5_s6pb
 [Occ=Once]
                                                            ds6_s6pc
 [Occ=Once]
                                                            ds7_s6pd
 [Occ=Once]
                                                            ds8_s6pe
 [Occ=Once]
                                                            _ [Occ=Dead] ->
                                   let {
                                     sat_s6pi [Occ=Once] ::
 Text.Regex.TDFA.Common.ExecOption
                                     [LclId] =
                                         [wild_s6p5] \u []
                                             case
 Text.Regex.TDFA.Common.regex_execOptions wild_s6p5
                                             of
                                             {
 Text.Regex.TDFA.Common.ExecOption _ [Occ=Dead] ->
 Text.Regex.TDFA.Common.ExecOption [GHC.Types.False];
                                             };
                                   } in
                                     Text.Regex.TDFA.Common.Regex [ds_s6p6
                                                                   ds1_s6p7
                                                                   ds2_s6p8
                                                                   ds3_s6p9
                                                                   ds4_s6pa
                                                                   ds5_s6pb
                                                                   ds6_s6pc
                                                                   ds7_s6pd
                                                                   ds8_s6pe
 sat_s6pi];
                             };
                   } in
                     Text.Regex.TDFA.NewDFA.Engine.execMatch
                         Data.Text.Lazy.uncons sat_s6pj sat_s6pk sat_s6pl
 s_s6p4;
         } in  Data.Foldable.length Data.Foldable.$fFoldable[] sat_s6pm;

 $cmatchOnceText_r6nY
   :: Text.Regex.TDFA.Common.Regex
      -> Data.Text.Internal.Lazy.Text
      -> GHC.Base.Maybe
           (Data.Text.Internal.Lazy.Text,
            Text.Regex.Base.RegexLike.MatchText
 Data.Text.Internal.Lazy.Text,
            Data.Text.Internal.Lazy.Text)
 [GblId, Arity=2, Unf=OtherCon []] =
     [] \r [regex_s6pn source_s6po]
         let {
           sat_s6pL [Occ=Once]
             :: GHC.Base.Maybe
                  (GHC.Arr.Array GHC.Types.Int (GHC.Types.Int,
 GHC.Types.Int))
           [LclId] =
               [regex_s6pn source_s6po] \u []
                   let {
                     sat_s6pK [Occ=Once] ::
 [Text.Regex.Base.RegexLike.MatchArray]
                     [LclId] =
                         [regex_s6pn source_s6po] \u []
                             let {
                               sat_s6pJ [Occ=Once] :: GHC.Types.Char
                               [LclId] =
                                   NO_CCS GHC.Types.C#! ['\n'#]; } in
                             let {
                               sat_s6pI [Occ=Once] ::
 Text.Regex.TDFA.Common.Position
                               [LclId] =
                                   NO_CCS GHC.Types.I#! [0#];
                             } in
                               Text.Regex.TDFA.NewDFA.Engine.execMatch
                                   Data.Text.Lazy.uncons regex_s6pn
 sat_s6pI sat_s6pJ source_s6po;
                   } in  Data.Maybe.listToMaybe sat_s6pK; } in
         let {
           sat_s6pH [Occ=Once]
             :: GHC.Arr.Array GHC.Types.Int (GHC.Types.Int, GHC.Types.Int)
                -> (Data.Text.Internal.Lazy.Text,
                    GHC.Arr.Array
                      GHC.Types.Int
                      (Data.Text.Internal.Lazy.Text, (GHC.Types.Int,
 GHC.Types.Int)),
                    Data.Text.Internal.Lazy.Text)
           [LclId] =
               [source_s6po] \r [ma_s6pp]
                   let {
                     ds_s6pq :: (GHC.Types.Int, GHC.Types.Int)
                     [LclId] =
                         [ma_s6pp] \u []
                             let {
                               sat_s6pr [Occ=Once] :: GHC.Types.Int
                               [LclId] =
                                   NO_CCS GHC.Types.I#! [0#];
                             } in
                               Data.Array.Base.!
                                   Data.Array.Base.$fIArrayArraye
                                   GHC.Arr.$fIxInt
                                   ma_s6pp
                                   sat_s6pr; } in
                   let {
                     o_s6ps :: GHC.Types.Int
                     [LclId] =
                         [ds_s6pq] \u []
                             case ds_s6pq of {
                               (,) o1_s6pu [Occ=Once] _ [Occ=Dead] ->
 o1_s6pu;
                             }; } in
                   let {
                     sat_s6pG [Occ=Once] :: Data.Text.Internal.Lazy.Text
                     [LclId] =
                         [source_s6po ds_s6pq o_s6ps] \u []
                             let {
                               sat_s6pF [Occ=Once] :: GHC.Types.Int
                               [LclId] =
                                   [ds_s6pq o_s6ps] \u []
                                       let {
                                         sat_s6pE [Occ=Once] ::
 GHC.Types.Int
                                         [LclId] =
                                             [ds_s6pq] \u []
                                                 case ds_s6pq of {
                                                   (,) _ [Occ=Dead] l_s6pD
 [Occ=Once] -> l_s6pD;
                                                 };
                                       } in  GHC.Num.+ GHC.Num.$fNumInt
 o_s6ps sat_s6pE;
                             } in  $cafter_r6mQ sat_s6pF source_s6po; } in
                   let {
                     sat_s6pA [Occ=Once]
                       :: GHC.Arr.Array
                            GHC.Types.Int
                            (Data.Text.Internal.Lazy.Text, (GHC.Types.Int,
 GHC.Types.Int))
                     [LclId] =
                         [source_s6po ma_s6pp] \u []
                             let {
                               sat_s6pz [Occ=Once]
                                 :: (GHC.Types.Int, GHC.Types.Int)
                                    -> (Data.Text.Internal.Lazy.Text,
 (GHC.Types.Int, GHC.Types.Int))
                               [LclId] =
                                   [source_s6po] \r [ol_s6px]
                                       let {
                                         sat_s6py [Occ=Once] ::
 Data.Text.Internal.Lazy.Text
                                         [LclId] =
                                             [source_s6po ol_s6px] \u []
                                                 $cextract_r6nK ol_s6px
 source_s6po;
                                       } in  (,) [sat_s6py ol_s6px];
                             } in  GHC.Base.fmap GHC.Arr.$fFunctorArray
 sat_s6pz ma_s6pp; } in
                   let {
                     sat_s6pw [Occ=Once] :: Data.Text.Internal.Lazy.Text
                     [LclId] =
                         [source_s6po o_s6ps] \u [] $cbefore_r6nJ o_s6ps
 source_s6po;
                   } in  (,,) [sat_s6pw sat_s6pA sat_s6pG];
         } in  GHC.Base.fmap GHC.Base.$fFunctorMaybe sat_s6pH sat_s6pL;

 Text.Regex.TDFA.Text.Lazy.$fRegexLikeRegexText [InlPrag=NOUSERINLINE
 CONLIKE]
   :: Text.Regex.Base.RegexLike.RegexLike
        Text.Regex.TDFA.Common.Regex Data.Text.Internal.Lazy.Text
 [GblId[DFunId]] =
     NO_CCS Text.Regex.Base.RegexLike.C:RegexLike!
 [Text.Regex.TDFA.Text.Lazy.$fExtractText
                                                    $cmatchOnce_r6nV
                                                    $cmatchAll_r6nU
                                                    $cmatchCount_r6nX
                                                    $cmatchTest_r6nT
                                                    $cmatchAllText_r6nW
                                                    $cmatchOnceText_r6nY];

 Text.Regex.TDFA.Text.Lazy.regexec
   :: Text.Regex.TDFA.Common.Regex
      -> Data.Text.Internal.Lazy.Text
      -> Data.Either.Either
           GHC.Base.String
           (GHC.Base.Maybe
              (Data.Text.Internal.Lazy.Text, Data.Text.Internal.Lazy.Text,
               Data.Text.Internal.Lazy.Text,
 [Data.Text.Internal.Lazy.Text]))
 [GblId, Arity=2, Unf=OtherCon []] =
     [] \r [r_s6pM txt_s6pN]
         case $cmatchOnceText_r6nY r_s6pM txt_s6pN of {
           GHC.Base.Nothing -> Data.Either.Right [GHC.Base.Nothing];
           GHC.Base.Just ds_s6pP [Occ=Once!] ->
               case ds_s6pP of {
                 (,,) pre_s6pR [Occ=Once] mt_s6pS post_s6pT [Occ=Once] ->
                     let {
                       sat_s6pZ [Occ=Once] ::
 [Data.Text.Internal.Lazy.Text]
                       [LclId] =
                           [mt_s6pS] \u []
                               let {
                                 sat_s6pY [Occ=Once]
                                   :: [(Data.Text.Internal.Lazy.Text,
 (Text.Regex.Base.RegexLike.MatchOffset,
 Text.Regex.Base.RegexLike.MatchLength))]
                                 [LclId] =
                                     [mt_s6pS] \u []
                                         let {
                                           sat_s6pX [Occ=Once]
                                             ::
 [(Data.Text.Internal.Lazy.Text,
 (Text.Regex.Base.RegexLike.MatchOffset,
 Text.Regex.Base.RegexLike.MatchLength))]
                                           [LclId] =
                                               [mt_s6pS] \u []
                                                   Data.Array.Base.elems
 Data.Array.Base.$fIArrayArraye
                                                       GHC.Arr.$fIxInt
                                                       mt_s6pS;
                                         } in  GHC.List.tail sat_s6pX;
                               } in  GHC.Base.map Data.Tuple.fst sat_s6pY;
 } in
                     let {
                       sat_s6pW [Occ=Once] :: Data.Text.Internal.Lazy.Text
                       [LclId] =
                           [mt_s6pS] \u []
                               let {
                                 sat_s6pV [Occ=Once]
                                   :: (Data.Text.Internal.Lazy.Text,
 (Text.Regex.Base.RegexLike.MatchOffset,
 Text.Regex.Base.RegexLike.MatchLength))
                                 [LclId] =
                                     [mt_s6pS] \u []
                                         let {
                                           sat_s6pU [Occ=Once] ::
 GHC.Types.Int
                                           [LclId] =
                                               NO_CCS GHC.Types.I#! [0#];
                                         } in
                                           Data.Array.Base.!
 Data.Array.Base.$fIArrayArraye
                                               GHC.Arr.$fIxInt
                                               mt_s6pS
                                               sat_s6pU;
                               } in  Data.Tuple.fst sat_s6pV; } in
                     let {
                       sat_s6q0 [Occ=Once]
                         :: (Data.Text.Internal.Lazy.Text,
 Data.Text.Internal.Lazy.Text,
                             Data.Text.Internal.Lazy.Text,
 [Data.Text.Internal.Lazy.Text])
                       [LclId] =
                           NO_CCS (,,,)! [pre_s6pR sat_s6pW post_s6pT
 sat_s6pZ]; } in
                     let {
                       sat_s6q1 [Occ=Once]
                         :: GHC.Base.Maybe
                              (Data.Text.Internal.Lazy.Text,
 Data.Text.Internal.Lazy.Text,
                               Data.Text.Internal.Lazy.Text,
 [Data.Text.Internal.Lazy.Text])
                       [LclId] =
                           NO_CCS GHC.Base.Just! [sat_s6q0];
                     } in  Data.Either.Right [sat_s6q1];
               };
         };

 $cmatch_r6nZ
   :: Text.Regex.TDFA.Common.Regex
      -> Data.Text.Internal.Lazy.Text -> Data.Text.Internal.Lazy.Text
 [GblId] =
     [] \u []
         Text.Regex.Base.Impl.polymatch
             Text.Regex.TDFA.Text.Lazy.$fRegexLikeRegexText;

 $cmatchM_r6o0
   :: forall (m :: * -> *).
      GHC.Base.Monad m =>
      Text.Regex.TDFA.Common.Regex
      -> Data.Text.Internal.Lazy.Text -> m Data.Text.Internal.Lazy.Text
 [GblId, Arity=1, Unf=OtherCon []] =
     [] \r [$dMonad_s6q2]
         Text.Regex.Base.Impl.polymatchM
             Text.Regex.TDFA.Text.Lazy.$fRegexLikeRegexText $dMonad_s6q2;

 Text.Regex.TDFA.Text.Lazy.$fRegexContextRegexTextText
 [InlPrag=NOUSERINLINE CONLIKE]
   :: Text.Regex.Base.RegexLike.RegexContext
        Text.Regex.TDFA.Common.Regex
        Data.Text.Internal.Lazy.Text
        Data.Text.Internal.Lazy.Text
 [GblId[DFunId]] =
     NO_CCS Text.Regex.Base.RegexLike.C:RegexContext!
 [Text.Regex.TDFA.Text.Lazy.$fRegexLikeRegexText
                                                       $cmatch_r6nZ
                                                       $cmatchM_r6o0];

 Text.Regex.TDFA.Text.Lazy.execute
   :: Text.Regex.TDFA.Common.Regex
      -> Data.Text.Internal.Lazy.Text
      -> Data.Either.Either
           GHC.Base.String
           (GHC.Base.Maybe Text.Regex.Base.RegexLike.MatchArray)
 [GblId, Arity=2, Unf=OtherCon []] =
     [] \r [r_s6q3 txt_s6q4]
         let {
           sat_s6q5 [Occ=Once]
             :: GHC.Base.Maybe Text.Regex.Base.RegexLike.MatchArray
           [LclId] =
               [r_s6q3 txt_s6q4] \u [] $cmatchOnce_r6nV r_s6q3 txt_s6q4;
         } in  Data.Either.Right [sat_s6q5];



 ==================== STG syntax: ====================
 sat_s6o2 :: GHC.Types.Int -> GHC.Int.Int64
 [LclId] =
     [] \u [] GHC.Enum.toEnum GHC.Int.$fEnumInt64;

 $cafter_r6mQ
   :: GHC.Types.Int
      -> Data.Text.Internal.Lazy.Text -> Data.Text.Internal.Lazy.Text
 [GblId] =
     [] \u [] GHC.Base.. Data.Text.Lazy.drop sat_s6o2;

 sat_s6o3 :: GHC.Types.Int -> GHC.Int.Int64
 [LclId] =
     [] \u [] GHC.Enum.toEnum GHC.Int.$fEnumInt64;

 $cbefore_r6nJ
   :: GHC.Types.Int
      -> Data.Text.Internal.Lazy.Text -> Data.Text.Internal.Lazy.Text
 [GblId] =
     [] \u [] GHC.Base.. Data.Text.Lazy.take sat_s6o3;

 Text.Regex.TDFA.Text.Lazy.$fExtractText [InlPrag=NOUSERINLINE CONLIKE]
   :: Text.Regex.Base.RegexLike.Extract Data.Text.Internal.Lazy.Text
 [GblId[DFunId]] =
     NO_CCS Text.Regex.Base.RegexLike.C:Extract! [$cbefore_r6nJ
                                                  $cafter_r6mQ
 Data.Text.Internal.Lazy.empty
                                                  $cextract_r6nK];
 $cextract_r6nK
   :: (GHC.Types.Int, GHC.Types.Int)
      -> Data.Text.Internal.Lazy.Text -> Data.Text.Internal.Lazy.Text
 [GblId] =
     [] \u []
         Text.Regex.Base.RegexLike.$dmextract
             Text.Regex.TDFA.Text.Lazy.$fExtractText;

 Text.Regex.TDFA.Text.Lazy.$fUnconsText [InlPrag=INLINE (sat-args=0)]
   :: Text.Regex.TDFA.NewDFA.Uncons.Uncons
        Data.Text.Internal.Lazy.Text
 [GblId[DFunId(nt)]] =
     [] \u [] Data.Text.Lazy.uncons;

 $cmakeRegexOptsM_r6nL
   :: forall (m :: * -> *).
      GHC.Base.Monad m =>
      Text.Regex.TDFA.Common.CompOption
      -> Text.Regex.TDFA.Common.ExecOption
      -> Data.Text.Internal.Lazy.Text
      -> m Text.Regex.TDFA.Common.Regex
 [GblId, Arity=4, Unf=OtherCon []] =
     [] \r [$dMonad_s6o4 c_s6o5 e_s6o6 source_s6o7]
         let {
           sat_s6o8 [Occ=Once] :: GHC.Base.String
           [LclId] =
               [source_s6o7] \u [] Data.Text.Lazy.unpack source_s6o7;
         } in
           Text.Regex.Base.RegexLike.makeRegexOptsM
 Text.Regex.TDFA.String.$fRegexMakerRegexCompOptionExecOption[]
               $dMonad_s6o4
               c_s6o5
               e_s6o6
               sat_s6o8;

 Text.Regex.TDFA.Text.Lazy.$fRegexMakerRegexCompOptionExecOptionText
 [InlPrag=NOUSERINLINE CONLIKE]
   :: Text.Regex.Base.RegexLike.RegexMaker
        Text.Regex.TDFA.Common.Regex
        Text.Regex.TDFA.Common.CompOption
        Text.Regex.TDFA.Common.ExecOption
        Data.Text.Internal.Lazy.Text
 [GblId[DFunId]] =
     NO_CCS Text.Regex.Base.RegexLike.C:RegexMaker!
 [Text.Regex.TDFA.Common.$fRegexOptionsRegexCompOptionExecOption
                                                     $cmakeRegex_r6nN
                                                     $cmakeRegexOpts_r6nM
                                                     $cmakeRegexM_r6nO
 $cmakeRegexOptsM_r6nL];
 $cmakeRegexOpts_r6nM
   :: Text.Regex.TDFA.Common.CompOption
      -> Text.Regex.TDFA.Common.ExecOption
      -> Data.Text.Internal.Lazy.Text
      -> Text.Regex.TDFA.Common.Regex
 [GblId] =
     [] \u []
         Text.Regex.Base.RegexLike.$dmmakeRegexOpts
 Text.Regex.TDFA.Text.Lazy.$fRegexMakerRegexCompOptionExecOptionText;
 $cmakeRegex_r6nN
   :: Data.Text.Internal.Lazy.Text -> Text.Regex.TDFA.Common.Regex
 [GblId] =
     [] \u []
         Text.Regex.Base.RegexLike.$dmmakeRegex
 Text.Regex.TDFA.Text.Lazy.$fRegexMakerRegexCompOptionExecOptionText;
 $cmakeRegexM_r6nO
   :: forall (m :: * -> *).
      GHC.Base.Monad m =>
      Data.Text.Internal.Lazy.Text -> m Text.Regex.TDFA.Common.Regex
 [GblId, Arity=1, Unf=OtherCon []] =
     [] \r [$dMonad_s6o9]
         Text.Regex.Base.RegexLike.$dmmakeRegexM
 Text.Regex.TDFA.Text.Lazy.$fRegexMakerRegexCompOptionExecOptionText
             $dMonad_s6o9;

 $trModule1_r6nP :: GHC.Prim.Addr#
 [GblId, Caf=NoCafRefs, Unf=OtherCon []] =
     "main"#;

 $trModule2_r6nQ :: GHC.Types.TrName
 [GblId, Caf=NoCafRefs, Unf=OtherCon []] =
     NO_CCS GHC.Types.TrNameS! [$trModule1_r6nP];

 $trModule3_r6nR :: GHC.Prim.Addr#
 [GblId, Caf=NoCafRefs, Unf=OtherCon []] =
     "Text.Regex.TDFA.Text.Lazy"#;

 $trModule4_r6nS :: GHC.Types.TrName
 [GblId, Caf=NoCafRefs, Unf=OtherCon []] =
     NO_CCS GHC.Types.TrNameS! [$trModule3_r6nR];

 Text.Regex.TDFA.Text.Lazy.$trModule :: GHC.Types.Module
 [GblId, Caf=NoCafRefs, Unf=OtherCon []] =
     NO_CCS GHC.Types.Module! [$trModule2_r6nQ $trModule4_r6nS];

 $cmatchTest_r6nT
   :: Text.Regex.TDFA.Common.Regex
      -> Data.Text.Internal.Lazy.Text -> GHC.Types.Bool
 [GblId] =
     [] \u []
         Text.Regex.TDFA.NewDFA.Tester.matchTest Data.Text.Lazy.uncons;

 $cmatchAll_r6nU
   :: Text.Regex.TDFA.Common.Regex
      -> Data.Text.Internal.Lazy.Text
      -> [Text.Regex.Base.RegexLike.MatchArray]
 [GblId, Arity=2, Unf=OtherCon []] =
     [] \r [r_s6oa s_s6ob]
         let {
           sat_s6od [Occ=Once] :: GHC.Types.Char
           [LclId] =
               NO_CCS GHC.Types.C#! ['\n'#]; } in
         let {
           sat_s6oc [Occ=Once] :: Text.Regex.TDFA.Common.Position
           [LclId] =
               NO_CCS GHC.Types.I#! [0#];
         } in
           Text.Regex.TDFA.NewDFA.Engine.execMatch
               Data.Text.Lazy.uncons r_s6oa sat_s6oc sat_s6od s_s6ob;

 Text.Regex.TDFA.Text.Lazy.compile
   :: Text.Regex.TDFA.Common.CompOption
      -> Text.Regex.TDFA.Common.ExecOption
      -> Data.Text.Internal.Lazy.Text
      -> Data.Either.Either GHC.Base.String Text.Regex.TDFA.Common.Regex
 [GblId, Arity=3, Unf=OtherCon []] =
     [] \r [compOpt_s6oe execOpt_s6of txt_s6og]
         let {
           sat_s6oh [Occ=Once] :: GHC.Base.String
           [LclId] =
               [txt_s6og] \u [] Data.Text.Lazy.unpack txt_s6og;
         } in
           case Text.Regex.TDFA.ReadRegex.parseRegex sat_s6oh of {
             Data.Either.Left err_s6oj [Occ=Once] ->
                 let {
                   sat_s6om [Occ=Once] :: [GHC.Types.Char]
                   [LclId] =
                       [err_s6oj] \u []
                           let {
                             sat_s6ol [Occ=Once] :: [GHC.Types.Char]
                             [LclId] =
                                 [err_s6oj] \u []
                                     GHC.Show.show
 Text.Parsec.Error.$fShowParseError err_s6oj; } in
                           let {
                             sat_s6ok [Occ=Once] :: [GHC.Types.Char]
                             [LclId] =
                                 [] \u []
                                     GHC.CString.unpackCString#
                                         "parseRegex for
 Text.Regex.TDFA.Text.Lazy failed:"#;
                           } in  GHC.Base.++ sat_s6ok sat_s6ol;
                 } in  Data.Either.Left [sat_s6om];
             Data.Either.Right pattern_s6on [Occ=Once] ->
                 let {
                   sat_s6oo [Occ=Once] :: Text.Regex.TDFA.Common.Regex
                   [LclId] =
                       [compOpt_s6oe execOpt_s6of pattern_s6on] \u []
                           Text.Regex.TDFA.TDFA.patternToRegex
                               pattern_s6on compOpt_s6oe execOpt_s6of;
                 } in  Data.Either.Right [sat_s6oo];
           };

 $cmatchOnce_r6nV
   :: Text.Regex.TDFA.Common.Regex
      -> Data.Text.Internal.Lazy.Text
      -> GHC.Base.Maybe Text.Regex.Base.RegexLike.MatchArray
 [GblId, Arity=2, Unf=OtherCon []] =
     [] \r [r_s6op s_s6oq]
         let {
           sat_s6or [Occ=Once] :: [Text.Regex.Base.RegexLike.MatchArray]
           [LclId] =
               [r_s6op s_s6oq] \u [] $cmatchAll_r6nU r_s6op s_s6oq;
         } in  Data.Maybe.listToMaybe sat_s6or;

 $cmatchAllText_r6nW
   :: Text.Regex.TDFA.Common.Regex
      -> Data.Text.Internal.Lazy.Text
      -> [Text.Regex.Base.RegexLike.MatchText
            Data.Text.Internal.Lazy.Text]
 [GblId, Arity=2, Unf=OtherCon []] =
     [] \r [regex_s6os source_s6ot]
         let {
           go_s6ou [Occ=LoopBreaker]
             :: GHC.Types.Int
                -> Data.Text.Internal.Lazy.Text
                -> [GHC.Arr.Array GHC.Types.Int (GHC.Types.Int,
 GHC.Types.Int)]
                -> [GHC.Arr.Array
                      GHC.Types.Int
                      (Data.Text.Internal.Lazy.Text, (GHC.Types.Int,
 GHC.Types.Int))]
           [LclId, Arity=3, Unf=OtherCon []] =
               sat-only [go_s6ou] \r [i_s6ov ds_s6ow ds1_s6ox]
                   case i_s6ov of i1_s6oy {
                     GHC.Types.I# _ [Occ=Dead] ->
                         case ds1_s6ox of {
                           [] -> [] [];
                           : x_s6oB xs_s6oC [Occ=Once] ->
                               let {
                                 ds2_s6oD :: (GHC.Types.Int, GHC.Types.Int)
                                 [LclId] =
                                     [x_s6oB] \u []
                                         let {
                                           sat_s6oE [Occ=Once] ::
 GHC.Types.Int
                                           [LclId] =
                                               NO_CCS GHC.Types.I#! [0#];
                                         } in
                                           Data.Array.Base.!
 Data.Array.Base.$fIArrayArraye
                                               GHC.Arr.$fIxInt
                                               x_s6oB
                                               sat_s6oE; } in
                               let {
                                 off0_s6oF :: GHC.Types.Int
                                 [LclId] =
                                     [ds2_s6oD] \u []
                                         case ds2_s6oD of {
                                           (,) off1_s6oH [Occ=Once] _
 [Occ=Dead] -> off1_s6oH;
                                         }; } in
                               let {
                                 len0_s6oJ :: GHC.Types.Int
                                 [LclId] =
                                     [ds2_s6oD] \u []
                                         case ds2_s6oD of {
                                           (,) _ [Occ=Dead] len1_s6oM
 [Occ=Once] -> len1_s6oM;
                                         }; } in
                               let {
                                 sat_s6p0 [Occ=Once]
                                   :: [GHC.Arr.Array
                                         GHC.Types.Int
                                         (Data.Text.Internal.Lazy.Text,
                                          (GHC.Types.Int, GHC.Types.Int))]
                                 [LclId] =
                                     [go_s6ou ds_s6ow i1_s6oy xs_s6oC
 off0_s6oF len0_s6oJ] \u []
                                         let {
                                           sat_s6oX [Occ=Once] ::
 GHC.Types.Int
                                           [LclId] =
                                               [i1_s6oy off0_s6oF
 len0_s6oJ] \u []
                                                   let {
                                                     sat_s6oW [Occ=Once] ::
 GHC.Types.Int
                                                     [LclId] =
                                                         [i1_s6oy
 len0_s6oJ] \u []
                                                             GHC.Num.-
 GHC.Num.$fNumInt len0_s6oJ i1_s6oy;
                                                   } in
                                                     GHC.Num.+
 GHC.Num.$fNumInt off0_s6oF sat_s6oW;
                                         } in
                                           case $cafter_r6mQ sat_s6oX
 ds_s6ow of t'_s6oY {
                                             __DEFAULT ->
                                                 let {
                                                   sat_s6oZ [Occ=Once] ::
 GHC.Types.Int
                                                   [LclId] =
                                                       [off0_s6oF
 len0_s6oJ] \u []
                                                           GHC.Num.+
 GHC.Num.$fNumInt off0_s6oF len0_s6oJ;
                                                 } in  go_s6ou sat_s6oZ
 t'_s6oY xs_s6oC;
                                           }; } in
                               let {
                                 sat_s6oV [Occ=Once]
                                   :: GHC.Arr.Array
                                        GHC.Types.Int
                                        (Data.Text.Internal.Lazy.Text,
                                         (GHC.Types.Int, GHC.Types.Int))
                                 [LclId] =
                                     [ds_s6ow i1_s6oy x_s6oB] \u []
                                         let {
                                           sat_s6oU [Occ=Once]
                                             :: (GHC.Types.Int,
 GHC.Types.Int)
                                                ->
 (Data.Text.Internal.Lazy.Text,
                                                    (GHC.Types.Int,
 GHC.Types.Int))
                                           [LclId] =
                                               [ds_s6ow i1_s6oy] \r
 [pair_s6oN]
                                                   case pair_s6oN of
 wild1_s6oO {
                                                     (,) off_s6oP
 [Occ=Once] len_s6oQ [Occ=Once] ->
                                                         let {
                                                           sat_s6oT
 [Occ=Once]
                                                             ::
 Data.Text.Internal.Lazy.Text
                                                           [LclId] =
                                                               [ds_s6ow
                                                                i1_s6oy
                                                                off_s6oP
                                                                len_s6oQ]
 \u []
                                                                   let {
 sat_s6oR [Occ=Once]
                                                                       ::
 GHC.Types.Int
 [LclId] =
 [i1_s6oy off_s6oP] \u []
 GHC.Num.-
 GHC.Num.$fNumInt
 off_s6oP
 i1_s6oy; } in
                                                                   let {
 sat_s6oS [Occ=Once]
                                                                       ::
 (GHC.Types.Int,
 GHC.Types.Int)
 [LclId] =
 NO_CCS (,)! [sat_s6oR
 len_s6oQ];
                                                                   } in
 $cextract_r6nK sat_s6oS ds_s6ow;
                                                         } in  (,)
 [sat_s6oT wild1_s6oO];
                                                   };
                                         } in  GHC.Base.fmap
 GHC.Arr.$fFunctorArray sat_s6oU x_s6oB;
                               } in  : [sat_s6oV sat_s6p0];
                         };
                   }; } in
         let {
           sat_s6p2 [Occ=Once]
             :: [GHC.Arr.Array GHC.Types.Int (GHC.Types.Int,
 GHC.Types.Int)]
           [LclId] =
               [regex_s6os source_s6ot] \u []
                   $cmatchAll_r6nU regex_s6os source_s6ot; } in
         let {
           sat_s6p1 [Occ=Once] :: GHC.Types.Int
           [LclId] =
               NO_CCS GHC.Types.I#! [0#];
         } in  go_s6ou sat_s6p1 source_s6ot sat_s6p2;

 $cmatchCount_r6nX
   :: Text.Regex.TDFA.Common.Regex
      -> Data.Text.Internal.Lazy.Text -> GHC.Types.Int
 [GblId, Arity=2, Unf=OtherCon []] =
     [] \r [r_s6p3 s_s6p4]
         let {
           sat_s6pm [Occ=Once] :: [Text.Regex.Base.RegexLike.MatchArray]
           [LclId] =
               [r_s6p3 s_s6p4] \u []
                   let {
                     sat_s6pl [Occ=Once] :: GHC.Types.Char
                     [LclId] =
                         NO_CCS GHC.Types.C#! ['\n'#]; } in
                   let {
                     sat_s6pk [Occ=Once] :: Text.Regex.TDFA.Common.Position
                     [LclId] =
                         NO_CCS GHC.Types.I#! [0#]; } in
                   let {
                     sat_s6pj [Occ=Once] :: Text.Regex.TDFA.Common.Regex
                     [LclId] =
                         [r_s6p3] \u []
                             case r_s6p3 of wild_s6p5 {
                               Text.Regex.TDFA.Common.Regex ds_s6p6
 [Occ=Once]
                                                            ds1_s6p7
 [Occ=Once]
                                                            ds2_s6p8
 [Occ=Once]
                                                            ds3_s6p9
 [Occ=Once]
                                                            ds4_s6pa
 [Occ=Once]
                                                            ds5_s6pb
 [Occ=Once]
                                                            ds6_s6pc
 [Occ=Once]
                                                            ds7_s6pd
 [Occ=Once]
                                                            ds8_s6pe
 [Occ=Once]
                                                            _ [Occ=Dead] ->
                                   let {
                                     sat_s6pi [Occ=Once] ::
 Text.Regex.TDFA.Common.ExecOption
                                     [LclId] =
                                         [wild_s6p5] \u []
                                             case
 Text.Regex.TDFA.Common.regex_execOptions wild_s6p5
                                             of
                                             {
 Text.Regex.TDFA.Common.ExecOption _ [Occ=Dead] ->
 Text.Regex.TDFA.Common.ExecOption [GHC.Types.False];
                                             };
                                   } in
                                     Text.Regex.TDFA.Common.Regex [ds_s6p6
                                                                   ds1_s6p7
                                                                   ds2_s6p8
                                                                   ds3_s6p9
                                                                   ds4_s6pa
                                                                   ds5_s6pb
                                                                   ds6_s6pc
                                                                   ds7_s6pd
                                                                   ds8_s6pe
 sat_s6pi];
                             };
                   } in
                     Text.Regex.TDFA.NewDFA.Engine.execMatch
                         Data.Text.Lazy.uncons sat_s6pj sat_s6pk sat_s6pl
 s_s6p4;
         } in  Data.Foldable.length Data.Foldable.$fFoldable[] sat_s6pm;

 $cmatchOnceText_r6nY
   :: Text.Regex.TDFA.Common.Regex
      -> Data.Text.Internal.Lazy.Text
      -> GHC.Base.Maybe
           (Data.Text.Internal.Lazy.Text,
            Text.Regex.Base.RegexLike.MatchText
 Data.Text.Internal.Lazy.Text,
            Data.Text.Internal.Lazy.Text)
 [GblId, Arity=2, Unf=OtherCon []] =
     [] \r [regex_s6pn source_s6po]
         let {
           sat_s6pL [Occ=Once]
             :: GHC.Base.Maybe
                  (GHC.Arr.Array GHC.Types.Int (GHC.Types.Int,
 GHC.Types.Int))
           [LclId] =
               [regex_s6pn source_s6po] \u []
                   let {
                     sat_s6pK [Occ=Once] ::
 [Text.Regex.Base.RegexLike.MatchArray]
                     [LclId] =
                         [regex_s6pn source_s6po] \u []
                             let {
                               sat_s6pJ [Occ=Once] :: GHC.Types.Char
                               [LclId] =
                                   NO_CCS GHC.Types.C#! ['\n'#]; } in
                             let {
                               sat_s6pI [Occ=Once] ::
 Text.Regex.TDFA.Common.Position
                               [LclId] =
                                   NO_CCS GHC.Types.I#! [0#];
                             } in
                               Text.Regex.TDFA.NewDFA.Engine.execMatch
                                   Data.Text.Lazy.uncons regex_s6pn
 sat_s6pI sat_s6pJ source_s6po;
                   } in  Data.Maybe.listToMaybe sat_s6pK; } in
         let {
           sat_s6pH [Occ=Once]
             :: GHC.Arr.Array GHC.Types.Int (GHC.Types.Int, GHC.Types.Int)
                -> (Data.Text.Internal.Lazy.Text,
                    GHC.Arr.Array
                      GHC.Types.Int
                      (Data.Text.Internal.Lazy.Text, (GHC.Types.Int,
 GHC.Types.Int)),
                    Data.Text.Internal.Lazy.Text)
           [LclId] =
               [source_s6po] \r [ma_s6pp]
                   let {
                     ds_s6pq :: (GHC.Types.Int, GHC.Types.Int)
                     [LclId] =
                         [ma_s6pp] \u []
                             let {
                               sat_s6pr [Occ=Once] :: GHC.Types.Int
                               [LclId] =
                                   NO_CCS GHC.Types.I#! [0#];
                             } in
                               Data.Array.Base.!
                                   Data.Array.Base.$fIArrayArraye
                                   GHC.Arr.$fIxInt
                                   ma_s6pp
                                   sat_s6pr; } in
                   let {
                     o_s6ps :: GHC.Types.Int
                     [LclId] =
                         [ds_s6pq] \u []
                             case ds_s6pq of {
                               (,) o1_s6pu [Occ=Once] _ [Occ=Dead] ->
 o1_s6pu;
                             }; } in
                   let {
                     sat_s6pG [Occ=Once] :: Data.Text.Internal.Lazy.Text
                     [LclId] =
                         [source_s6po ds_s6pq o_s6ps] \u []
                             let {
                               sat_s6pF [Occ=Once] :: GHC.Types.Int
                               [LclId] =
                                   [ds_s6pq o_s6ps] \u []
                                       let {
                                         sat_s6pE [Occ=Once] ::
 GHC.Types.Int
                                         [LclId] =
                                             [ds_s6pq] \u []
                                                 case ds_s6pq of {
                                                   (,) _ [Occ=Dead] l_s6pD
 [Occ=Once] -> l_s6pD;
                                                 };
                                       } in  GHC.Num.+ GHC.Num.$fNumInt
 o_s6ps sat_s6pE;
                             } in  $cafter_r6mQ sat_s6pF source_s6po; } in
                   let {
                     sat_s6pA [Occ=Once]
                       :: GHC.Arr.Array
                            GHC.Types.Int
                            (Data.Text.Internal.Lazy.Text, (GHC.Types.Int,
 GHC.Types.Int))
                     [LclId] =
                         [source_s6po ma_s6pp] \u []
                             let {
                               sat_s6pz [Occ=Once]
                                 :: (GHC.Types.Int, GHC.Types.Int)
                                    -> (Data.Text.Internal.Lazy.Text,
 (GHC.Types.Int, GHC.Types.Int))
                               [LclId] =
                                   [source_s6po] \r [ol_s6px]
                                       let {
                                         sat_s6py [Occ=Once] ::
 Data.Text.Internal.Lazy.Text
                                         [LclId] =
                                             [source_s6po ol_s6px] \u []
                                                 $cextract_r6nK ol_s6px
 source_s6po;
                                       } in  (,) [sat_s6py ol_s6px];
                             } in  GHC.Base.fmap GHC.Arr.$fFunctorArray
 sat_s6pz ma_s6pp; } in
                   let {
                     sat_s6pw [Occ=Once] :: Data.Text.Internal.Lazy.Text
                     [LclId] =
                         [source_s6po o_s6ps] \u [] $cbefore_r6nJ o_s6ps
 source_s6po;
                   } in  (,,) [sat_s6pw sat_s6pA sat_s6pG];
         } in  GHC.Base.fmap GHC.Base.$fFunctorMaybe sat_s6pH sat_s6pL;

 Text.Regex.TDFA.Text.Lazy.$fRegexLikeRegexText [InlPrag=NOUSERINLINE
 CONLIKE]
   :: Text.Regex.Base.RegexLike.RegexLike
        Text.Regex.TDFA.Common.Regex Data.Text.Internal.Lazy.Text
 [GblId[DFunId]] =
     NO_CCS Text.Regex.Base.RegexLike.C:RegexLike!
 [Text.Regex.TDFA.Text.Lazy.$fExtractText
                                                    $cmatchOnce_r6nV
                                                    $cmatchAll_r6nU
                                                    $cmatchCount_r6nX
                                                    $cmatchTest_r6nT
                                                    $cmatchAllText_r6nW
                                                    $cmatchOnceText_r6nY];

 Text.Regex.TDFA.Text.Lazy.regexec
   :: Text.Regex.TDFA.Common.Regex
      -> Data.Text.Internal.Lazy.Text
      -> Data.Either.Either
           GHC.Base.String
           (GHC.Base.Maybe
              (Data.Text.Internal.Lazy.Text, Data.Text.Internal.Lazy.Text,
               Data.Text.Internal.Lazy.Text,
 [Data.Text.Internal.Lazy.Text]))
 [GblId, Arity=2, Unf=OtherCon []] =
     [] \r [r_s6pM txt_s6pN]
         case $cmatchOnceText_r6nY r_s6pM txt_s6pN of {
           GHC.Base.Nothing -> Data.Either.Right [GHC.Base.Nothing];
           GHC.Base.Just ds_s6pP [Occ=Once!] ->
               case ds_s6pP of {
                 (,,) pre_s6pR [Occ=Once] mt_s6pS post_s6pT [Occ=Once] ->
                     let {
                       sat_s6pZ [Occ=Once] ::
 [Data.Text.Internal.Lazy.Text]
                       [LclId] =
                           [mt_s6pS] \u []
                               let {
                                 sat_s6pY [Occ=Once]
                                   :: [(Data.Text.Internal.Lazy.Text,
 (Text.Regex.Base.RegexLike.MatchOffset,
 Text.Regex.Base.RegexLike.MatchLength))]
                                 [LclId] =
                                     [mt_s6pS] \u []
                                         let {
                                           sat_s6pX [Occ=Once]
                                             ::
 [(Data.Text.Internal.Lazy.Text,
 (Text.Regex.Base.RegexLike.MatchOffset,
 Text.Regex.Base.RegexLike.MatchLength))]
                                           [LclId] =
                                               [mt_s6pS] \u []
                                                   Data.Array.Base.elems
 Data.Array.Base.$fIArrayArraye
                                                       GHC.Arr.$fIxInt
                                                       mt_s6pS;
                                         } in  GHC.List.tail sat_s6pX;
                               } in  GHC.Base.map Data.Tuple.fst sat_s6pY;
 } in
                     let {
                       sat_s6pW [Occ=Once] :: Data.Text.Internal.Lazy.Text
                       [LclId] =
                           [mt_s6pS] \u []
                               let {
                                 sat_s6pV [Occ=Once]
                                   :: (Data.Text.Internal.Lazy.Text,
 (Text.Regex.Base.RegexLike.MatchOffset,
 Text.Regex.Base.RegexLike.MatchLength))
                                 [LclId] =
                                     [mt_s6pS] \u []
                                         let {
                                           sat_s6pU [Occ=Once] ::
 GHC.Types.Int
                                           [LclId] =
                                               NO_CCS GHC.Types.I#! [0#];
                                         } in
                                           Data.Array.Base.!
 Data.Array.Base.$fIArrayArraye
                                               GHC.Arr.$fIxInt
                                               mt_s6pS
                                               sat_s6pU;
                               } in  Data.Tuple.fst sat_s6pV; } in
                     let {
                       sat_s6q0 [Occ=Once]
                         :: (Data.Text.Internal.Lazy.Text,
 Data.Text.Internal.Lazy.Text,
                             Data.Text.Internal.Lazy.Text,
 [Data.Text.Internal.Lazy.Text])
                       [LclId] =
                           NO_CCS (,,,)! [pre_s6pR sat_s6pW post_s6pT
 sat_s6pZ]; } in
                     let {
                       sat_s6q1 [Occ=Once]
                         :: GHC.Base.Maybe
                              (Data.Text.Internal.Lazy.Text,
 Data.Text.Internal.Lazy.Text,
                               Data.Text.Internal.Lazy.Text,
 [Data.Text.Internal.Lazy.Text])
                       [LclId] =
                           NO_CCS GHC.Base.Just! [sat_s6q0];
                     } in  Data.Either.Right [sat_s6q1];
               };
         };

 $cmatch_r6nZ
   :: Text.Regex.TDFA.Common.Regex
      -> Data.Text.Internal.Lazy.Text -> Data.Text.Internal.Lazy.Text
 [GblId] =
     [] \u []
         Text.Regex.Base.Impl.polymatch
             Text.Regex.TDFA.Text.Lazy.$fRegexLikeRegexText;

 $cmatchM_r6o0
   :: forall (m :: * -> *).
      GHC.Base.Monad m =>
      Text.Regex.TDFA.Common.Regex
      -> Data.Text.Internal.Lazy.Text -> m Data.Text.Internal.Lazy.Text
 [GblId, Arity=1, Unf=OtherCon []] =
     [] \r [$dMonad_s6q2]
         Text.Regex.Base.Impl.polymatchM
             Text.Regex.TDFA.Text.Lazy.$fRegexLikeRegexText $dMonad_s6q2;

 Text.Regex.TDFA.Text.Lazy.$fRegexContextRegexTextText
 [InlPrag=NOUSERINLINE CONLIKE]
   :: Text.Regex.Base.RegexLike.RegexContext
        Text.Regex.TDFA.Common.Regex
        Data.Text.Internal.Lazy.Text
        Data.Text.Internal.Lazy.Text
 [GblId[DFunId]] =
     NO_CCS Text.Regex.Base.RegexLike.C:RegexContext!
 [Text.Regex.TDFA.Text.Lazy.$fRegexLikeRegexText
                                                       $cmatch_r6nZ
                                                       $cmatchM_r6o0];

 Text.Regex.TDFA.Text.Lazy.execute
   :: Text.Regex.TDFA.Common.Regex
      -> Data.Text.Internal.Lazy.Text
      -> Data.Either.Either
           GHC.Base.String
           (GHC.Base.Maybe Text.Regex.Base.RegexLike.MatchArray)
 [GblId, Arity=2, Unf=OtherCon []] =
     [] \r [r_s6q3 txt_s6q4]
         let {
           sat_s6q5 [Occ=Once]
             :: GHC.Base.Maybe Text.Regex.Base.RegexLike.MatchArray
           [LclId] =
               [r_s6q3 txt_s6q4] \u [] $cmatchOnce_r6nV r_s6q3 txt_s6q4;
         } in  Data.Either.Right [sat_s6q5];

 }}}

 Which I think is strange, because `wnext2` doesn't look like anything GHC
 would autogenerate, but rather like a name a human would choose on
 purpose.

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


More information about the ghc-tickets mailing list