[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