/export/starexec/sandbox/solver/bin/starexec_run_standard /export/starexec/sandbox/benchmark/theBenchmark.hs /export/starexec/sandbox/output/output_files -------------------------------------------------------------------------------- MAYBE proof of /export/starexec/sandbox/benchmark/theBenchmark.hs # AProVE Commit ID: 794c25de1cacf0d048858bcd21c9a779e1221865 marcel 20200619 unpublished dirty H-Termination with start terms of the given HASKELL could not be shown: (0) HASKELL (1) LR [EQUIVALENT, 0 ms] (2) HASKELL (3) CR [EQUIVALENT, 0 ms] (4) HASKELL (5) IFR [EQUIVALENT, 0 ms] (6) HASKELL (7) BR [EQUIVALENT, 0 ms] (8) HASKELL (9) COR [EQUIVALENT, 0 ms] (10) HASKELL (11) LetRed [EQUIVALENT, 42 ms] (12) HASKELL (13) NumRed [SOUND, 0 ms] (14) HASKELL ---------------------------------------- (0) Obligation: mainModule Main module Main where { import qualified Prelude; } ---------------------------------------- (1) LR (EQUIVALENT) Lambda Reductions: The following Lambda expression "\vu54->case vu54 of { (ch,''' : t) -> if ch /= ''' : [] then (''' : ch ++ ''' : [],t) : [] else []; _ -> []} " is transformed to "lex0 vu54 = case vu54 of { (ch,''' : t) -> if ch /= ''' : [] then (''' : ch ++ ''' : [],t) : [] else []; _ -> []} ; " The following Lambda expression "\vu56->case vu56 of { (str,u) -> (ch ++ str,u) : []; _ -> []} " is transformed to "lexString0 ch vu56 = case vu56 of { (str,u) -> (ch ++ str,u) : []; _ -> []} ; " The following Lambda expression "\vu57->case vu57 of { (ch,t) -> concatMap (lexString0 ch) (lexString t); _ -> []} " is transformed to "lexString1 vu57 = case vu57 of { (ch,t) -> concatMap (lexString0 ch) (lexString t); _ -> []} ; " The following Lambda expression "\vu58->case vu58 of { '\' : t -> ([],t) : []; _ -> []} " is transformed to "lexStrItem0 vu58 = case vu58 of { '\' : t -> ([],t) : []; _ -> []} ; " The following Lambda expression "\vu55->case vu55 of { (str,t) -> ('"' : str,t) : []; _ -> []} " is transformed to "lex1 vu55 = case vu55 of { (str,t) -> ('"' : str,t) : []; _ -> []} ; " The following Lambda expression "\vu63->case vu63 of { (e,u) -> ('.' : ds ++ e,u) : []; _ -> []} " is transformed to "lexFracExp0 ds vu63 = case vu63 of { (e,u) -> ('.' : ds ++ e,u) : []; _ -> []} ; " The following Lambda expression "\vu64->case vu64 of { (ds,t) -> concatMap (lexFracExp0 ds) (lexExp t); _ -> []} " is transformed to "lexFracExp1 vu64 = case vu64 of { (ds,t) -> concatMap (lexFracExp0 ds) (lexExp t); _ -> []} ; " The following Lambda expression "\vu65->case vu65 of { (ds,u) -> (e : c : ds,u) : []; _ -> []} " is transformed to "lexExp0 e c vu65 = case vu65 of { (ds,u) -> (e : c : ds,u) : []; _ -> []} ; " The following Lambda expression "\vu66->case vu66 of { c : t -> if c `elem` '+' : '-' : [] then concatMap (lexExp0 e c) (lexDigits t) else []; _ -> []} " is transformed to "lexExp1 e vu66 = case vu66 of { c : t -> if c `elem` '+' : '-' : [] then concatMap (lexExp0 e c) (lexDigits t) else []; _ -> []} ; " The following Lambda expression "\vu67->case vu67 of { (ds,t) -> (e : ds,t) : []; _ -> []} " is transformed to "lexExp2 e vu67 = case vu67 of { (ds,t) -> (e : ds,t) : []; _ -> []} ; " The following Lambda expression "\vu59->case vu59 of { (sym,t) -> (c : sym,t) : []; _ -> []} " is transformed to "lex2 c vu59 = case vu59 of { (sym,t) -> (c : sym,t) : []; _ -> []} ; " The following Lambda expression "\vu60->case vu60 of { (nam,t) -> (c : nam,t) : []; _ -> []} " is transformed to "lex3 c vu60 = case vu60 of { (nam,t) -> (c : nam,t) : []; _ -> []} ; " The following Lambda expression "\vu61->case vu61 of { (fe,t) -> (c : ds ++ fe,t) : []; _ -> []} " is transformed to "lex4 c ds vu61 = case vu61 of { (fe,t) -> (c : ds ++ fe,t) : []; _ -> []} ; " The following Lambda expression "\vu62->case vu62 of { (ds,s) -> concatMap (lex4 c ds) (lexFracExp s); _ -> []} " is transformed to "lex5 c vu62 = case vu62 of { (ds,s) -> concatMap (lex4 c ds) (lexFracExp s); _ -> []} ; " The following Lambda expression "\ab->(a,b)" is transformed to "zip0 a b = (a,b); " The following Lambda expression "\vu68->case vu68 of { (cs@(_ : _),t) -> (cs,t) : []; _ -> []} " is transformed to "nonnull0 vu68 = case vu68 of { (cs@(_ : _),t) -> (cs,t) : []; _ -> []} ; " The following Lambda expression "\vu48->case vu48 of { (')' : [],u) -> (x,u) : []; _ -> []} " is transformed to "mandatory0 x vu48 = case vu48 of { (')' : [],u) -> (x,u) : []; _ -> []} ; " The following Lambda expression "\vu49->case vu49 of { (x,t) -> concatMap (mandatory0 x) (lex t); _ -> []} " is transformed to "mandatory1 vu49 = case vu49 of { (x,t) -> concatMap (mandatory0 x) (lex t); _ -> []} ; " The following Lambda expression "\vu50->case vu50 of { ('(' : [],s) -> concatMap mandatory1 (optional s); _ -> []} " is transformed to "mandatory2 vu50 = case vu50 of { ('(' : [],s) -> concatMap mandatory1 (optional s); _ -> []} ; " The following Lambda expression "\ex->if isEOFError ex then return '\10' else ioError ex" is transformed to "getRest0 ex = if isEOFError ex then return '\10' else ioError ex; " The following Lambda expression "\cs->return (c : cs)" is transformed to "getRest1 c cs = return (c : cs); " The following Lambda expression "\c->if c == '\10' then return [] else getRest >>= getRest1 c" is transformed to "getRest2 c = if c == '\10' then return [] else getRest >>= getRest1 c; " The following Lambda expression "\ls->return (c : ls)" is transformed to "getLine0 c ls = return (c : ls); " The following Lambda expression "\c->if c == '\10' then return [] else getRest >>= getLine0 c" is transformed to "getLine1 c = if c == '\10' then return [] else getRest >>= getLine0 c; " The following Lambda expression "\vu89->case vu89 of { ([],[]) -> x : []; _ -> []} " is transformed to "readIO0 x vu89 = case vu89 of { ([],[]) -> x : []; _ -> []} ; " The following Lambda expression "\vu90->case vu90 of { (x,t) -> concatMap (readIO0 x) (lex t); _ -> []} " is transformed to "readIO1 vu90 = case vu90 of { (x,t) -> concatMap (readIO0 x) (lex t); _ -> []} ; " The following Lambda expression "\r->return r" is transformed to "readLn0 r = return r; " The following Lambda expression "\l->readIO l >>= readLn0" is transformed to "readLn1 l = readIO l >>= readLn0; " The following Lambda expression "\vu69->case vu69 of { ([],s') -> (mne,s') : []; _ -> []} " is transformed to "lexEsc0 mne vu69 = case vu69 of { ([],s') -> (mne,s') : []; _ -> []} ; " The following Lambda expression "\vu70->case vu70 of { (c,mne) -> concatMap (lexEsc0 mne) (lexmatch mne s : []); _ -> []} " is transformed to "lexEsc1 s vu70 = case vu70 of { (c,mne) -> concatMap (lexEsc0 mne) (lexmatch mne s : []); _ -> []} ; " The following Lambda expression "\(_,zs)->zs" is transformed to "zs0 (_,zs) = zs; " The following Lambda expression "\(ys,_)->ys" is transformed to "ys0 (ys,_) = ys; " The following Lambda expression "\vu22->case vu22 of { (')' : [],t) -> ((),t) : []; _ -> []} " is transformed to "readsPrec0 vu22 = case vu22 of { (')' : [],t) -> ((),t) : []; _ -> []} ; " The following Lambda expression "\vu23->case vu23 of { ('(' : [],s) -> concatMap readsPrec0 (lex s); _ -> []} " is transformed to "readsPrec1 vu23 = case vu23 of { ('(' : [],s) -> concatMap readsPrec0 (lex s); _ -> []} ; " The following Lambda expression "\r->concatMap readsPrec1 (lex r)" is transformed to "readsPrec2 r = concatMap readsPrec1 (lex r); " ---------------------------------------- (2) Obligation: mainModule Main module Main where { import qualified Prelude; } ---------------------------------------- (3) CR (EQUIVALENT) Case Reductions: The following Case expression "case vu90 of { (x,t) -> concatMap (readIO0 x) (lex t); _ -> []} " is transformed to "readIO10 (x,t) = concatMap (readIO0 x) (lex t); readIO10 _ = []; " The following Case expression "case vu89 of { ([],[]) -> x : []; _ -> []} " is transformed to "readIO00 x ([],[]) = x : []; readIO00 x _ = []; " The following Case expression "case vu55 of { (str,t) -> ('"' : str,t) : []; _ -> []} " is transformed to "lex10 (str,t) = ('"' : str,t) : []; lex10 _ = []; " The following Case expression "case vu57 of { (ch,t) -> concatMap (lexString0 ch) (lexString t); _ -> []} " is transformed to "lexString10 (ch,t) = concatMap (lexString0 ch) (lexString t); lexString10 _ = []; " The following Case expression "case vu56 of { (str,u) -> (ch ++ str,u) : []; _ -> []} " is transformed to "lexString00 ch (str,u) = (ch ++ str,u) : []; lexString00 ch _ = []; " The following Case expression "case vu58 of { '\' : t -> ([],t) : []; _ -> []} " is transformed to "lexStrItem00 ('\' : t) = ([],t) : []; lexStrItem00 _ = []; " The following Case expression "case vu59 of { (sym,t) -> (c : sym,t) : []; _ -> []} " is transformed to "lex20 c (sym,t) = (c : sym,t) : []; lex20 c _ = []; " The following Case expression "case vu67 of { (ds,t) -> (e : ds,t) : []; _ -> []} " is transformed to "lexExp20 e (ds,t) = (e : ds,t) : []; lexExp20 e _ = []; " The following Case expression "case vu65 of { (ds,u) -> (e : c : ds,u) : []; _ -> []} " is transformed to "lexExp00 e c (ds,u) = (e : c : ds,u) : []; lexExp00 e c _ = []; " The following Case expression "case vu62 of { (ds,s) -> concatMap (lex4 c ds) (lexFracExp s); _ -> []} " is transformed to "lex50 c (ds,s) = concatMap (lex4 c ds) (lexFracExp s); lex50 c _ = []; " The following Case expression "case vu66 of { c : t -> if c `elem` '+' : '-' : [] then concatMap (lexExp0 e c) (lexDigits t) else []; _ -> []} " is transformed to "lexExp10 e (c : t) = if c `elem` '+' : '-' : [] then concatMap (lexExp0 e c) (lexDigits t) else []; lexExp10 e _ = []; " The following Case expression "case vu60 of { (nam,t) -> (c : nam,t) : []; _ -> []} " is transformed to "lex30 c (nam,t) = (c : nam,t) : []; lex30 c _ = []; " The following Case expression "case vu61 of { (fe,t) -> (c : ds ++ fe,t) : []; _ -> []} " is transformed to "lex40 c ds (fe,t) = (c : ds ++ fe,t) : []; lex40 c ds _ = []; " The following Case expression "case vu63 of { (e,u) -> ('.' : ds ++ e,u) : []; _ -> []} " is transformed to "lexFracExp00 ds (e,u) = ('.' : ds ++ e,u) : []; lexFracExp00 ds _ = []; " The following Case expression "case vu64 of { (ds,t) -> concatMap (lexFracExp0 ds) (lexExp t); _ -> []} " is transformed to "lexFracExp10 (ds,t) = concatMap (lexFracExp0 ds) (lexExp t); lexFracExp10 _ = []; " The following Case expression "case vu23 of { ('(' : [],s) -> concatMap readsPrec0 (lex s); _ -> []} " is transformed to "readsPrec10 ('(' : [],s) = concatMap readsPrec0 (lex s); readsPrec10 _ = []; " The following Case expression "case vu22 of { (')' : [],t) -> ((),t) : []; _ -> []} " is transformed to "readsPrec00 (')' : [],t) = ((),t) : []; readsPrec00 _ = []; " The following Case expression "case vu54 of { (ch,''' : t) -> if ch /= ''' : [] then (''' : ch ++ ''' : [],t) : [] else []; _ -> []} " is transformed to "lex00 (ch,''' : t) = if ch /= ''' : [] then (''' : ch ++ ''' : [],t) : [] else []; lex00 _ = []; " The following Case expression "case vu48 of { (')' : [],u) -> (x,u) : []; _ -> []} " is transformed to "mandatory00 x (')' : [],u) = (x,u) : []; mandatory00 x _ = []; " The following Case expression "case vu49 of { (x,t) -> concatMap (mandatory0 x) (lex t); _ -> []} " is transformed to "mandatory10 (x,t) = concatMap (mandatory0 x) (lex t); mandatory10 _ = []; " The following Case expression "case vu50 of { ('(' : [],s) -> concatMap mandatory1 (optional s); _ -> []} " is transformed to "mandatory20 ('(' : [],s) = concatMap mandatory1 (optional s); mandatory20 _ = []; " The following Case expression "case vu68 of { (cs@(_ : _),t) -> (cs,t) : []; _ -> []} " is transformed to "nonnull00 (cs@(_ : _),t) = (cs,t) : []; nonnull00 _ = []; " The following Case expression "case concatMap readIO1 (reads s) of { x : [] -> return x; [] -> ioError (userError ('N' : 'P' : [])); _ -> ioError (userError ('A' : 'P' : []))} " is transformed to "readIO2 (x : []) = return x; readIO2 [] = ioError (userError ('N' : 'P' : [])); readIO2 _ = ioError (userError ('A' : 'P' : [])); " The following Case expression "case concatMap (lexEsc1 s) table of { pr : _ -> pr : []; [] -> []} " is transformed to "lexEsc2 (pr : _) = pr : []; lexEsc2 [] = []; " The following Case expression "case vu69 of { ([],s') -> (mne,s') : []; _ -> []} " is transformed to "lexEsc00 mne ([],s') = (mne,s') : []; lexEsc00 mne _ = []; " The following Case expression "case vu70 of { (c,mne) -> concatMap (lexEsc0 mne) (lexmatch mne s : []); _ -> []} " is transformed to "lexEsc10 s (c,mne) = concatMap (lexEsc0 mne) (lexmatch mne s : []); lexEsc10 s _ = []; " ---------------------------------------- (4) Obligation: mainModule Main module Main where { import qualified Prelude; } ---------------------------------------- (5) IFR (EQUIVALENT) If Reductions: The following If expression "if c `elem` '+' : '-' : [] then concatMap (lexExp0 e c) (lexDigits t) else []" is transformed to "lexExp100 e c t True = concatMap (lexExp0 e c) (lexDigits t); lexExp100 e c t False = []; " The following If expression "if b then mandatory else optional" is transformed to "readParen0 True = mandatory; readParen0 False = optional; " The following If expression "if isEOFError ex then return '\10' else ioError ex" is transformed to "getRest00 ex True = return '\10'; getRest00 ex False = ioError ex; " The following If expression "if c == '\10' then return [] else getRest >>= getLine0 c" is transformed to "getLine10 c True = return []; getLine10 c False = getRest >>= getLine0 c; " The following If expression "if c == '\10' then return [] else getRest >>= getRest1 c" is transformed to "getRest20 c True = return []; getRest20 c False = getRest >>= getRest1 c; " The following If expression "if ch /= ''' : [] then (''' : ch ++ ''' : [],t) : [] else []" is transformed to "lex000 ch t True = (''' : ch ++ ''' : [],t) : []; lex000 ch t False = []; " ---------------------------------------- (6) Obligation: mainModule Main module Main where { import qualified Prelude; } ---------------------------------------- (7) BR (EQUIVALENT) Replaced joker patterns by fresh variables and removed binding patterns. Binding Reductions: The bind variable of the following binding Pattern "cs@(vx : vy)" is replaced by the following term "vx : vy" The bind variable of the following binding Pattern "xs@(vuy : vuz)" is replaced by the following term "vuy : vuz" The bind variable of the following binding Pattern "s@(vvx : vvy)" is replaced by the following term "vvx : vvy" The bind variable of the following binding Pattern "xs@(vwx : vwy)" is replaced by the following term "vwx : vwy" ---------------------------------------- (8) Obligation: mainModule Main module Main where { import qualified Prelude; } ---------------------------------------- (9) COR (EQUIVALENT) Cond Reductions: The following Function with conditions "readsPrec00 (')' : [],t) = ((),t) : []; readsPrec00 wu = []; " is transformed to "readsPrec00 (vyu : vyv,t) = readsPrec002 (vyu : vyv,t); readsPrec00 wu = readsPrec000 wu; " "readsPrec000 wu = []; " "readsPrec001 True (vyu : [],t) = ((),t) : []; readsPrec001 vyw vyx = readsPrec000 vyx; " "readsPrec002 (vyu : vyv,t) = readsPrec001 (vyu == ')') (vyu : vyv,t); readsPrec002 vyy = readsPrec000 vyy; " The following Function with conditions "takeWhile p [] = []; takeWhile p (x : xs)|p xx : takeWhile p xs|otherwise[]; " is transformed to "takeWhile p [] = takeWhile3 p []; takeWhile p (x : xs) = takeWhile2 p (x : xs); " "takeWhile1 p x xs True = x : takeWhile p xs; takeWhile1 p x xs False = takeWhile0 p x xs otherwise; " "takeWhile0 p x xs True = []; " "takeWhile2 p (x : xs) = takeWhile1 p x xs (p x); " "takeWhile3 p [] = []; takeWhile3 vzv vzw = takeWhile2 vzv vzw; " The following Function with conditions "lexString ('"' : s) = ('"' : [],s) : []; lexString s = concatMap lexString1 (lexStrItem s); " is transformed to "lexString (vzy : s) = lexString4 (vzy : s); lexString s = lexString2 s; " "lexString2 s = concatMap lexString1 (lexStrItem s); " "lexString3 True (vzy : s) = ('"' : [],s) : []; lexString3 vzz wuu = lexString2 wuu; " "lexString4 (vzy : s) = lexString3 (vzy == '"') (vzy : s); lexString4 wuv = lexString2 wuv; " The following Function with conditions "lexStrItem ('\' : '&' : s) = ('\' : '&' : [],s) : []; lexStrItem ('\' : c : s)|isSpace cconcatMap lexStrItem0 (dropWhile isSpace s : []); lexStrItem s = lexLitChar s; " is transformed to "lexStrItem (wvz : wwx) = lexStrItem7 (wvz : wwx); lexStrItem (wux : wvu) = lexStrItem4 (wux : wvu); lexStrItem s = lexStrItem1 s; " "lexStrItem1 s = lexLitChar s; " "lexStrItem2 wux c s True = concatMap lexStrItem0 (dropWhile isSpace s : []); lexStrItem2 wux c s False = lexStrItem1 (wux : c : s); " "lexStrItem3 True (wux : c : s) = lexStrItem2 wux c s (isSpace c); lexStrItem3 wvv wvw = lexStrItem1 wvw; " "lexStrItem4 (wux : wvu) = lexStrItem3 (wux == '\') (wux : wvu); lexStrItem4 wvx = lexStrItem1 wvx; " "lexStrItem5 True (wvz : wwv : s) = ('\' : '&' : [],s) : []; lexStrItem5 wwy wwz = lexStrItem4 wwz; " "lexStrItem6 True (wvz : wwv : s) = lexStrItem5 (wwv == '&') (wvz : wwv : s); lexStrItem6 wxu wxv = lexStrItem4 wxv; " "lexStrItem7 (wvz : wwx) = lexStrItem6 (wvz == '\') (wvz : wwx); lexStrItem7 wxw = lexStrItem4 wxw; " The following Function with conditions "lexStrItem00 ('\' : t) = ([],t) : []; lexStrItem00 wy = []; " is transformed to "lexStrItem00 (wxy : t) = lexStrItem002 (wxy : t); lexStrItem00 wy = lexStrItem000 wy; " "lexStrItem000 wy = []; " "lexStrItem001 True (wxy : t) = ([],t) : []; lexStrItem001 wxz wyu = lexStrItem000 wyu; " "lexStrItem002 (wxy : t) = lexStrItem001 (wxy == '\') (wxy : t); lexStrItem002 wyv = lexStrItem000 wyv; " The following Function with conditions "lexExp (e : s)|e `elem` 'e' : 'E' : []concatMap (lexExp1 e) (s : []) ++ concatMap (lexExp2 e) (lexDigits s); lexExp s = ([],s) : []; " is transformed to "lexExp (e : s) = lexExp5 (e : s); lexExp s = lexExp3 s; " "lexExp3 s = ([],s) : []; " "lexExp4 e s True = concatMap (lexExp1 e) (s : []) ++ concatMap (lexExp2 e) (lexDigits s); lexExp4 e s False = lexExp3 (e : s); " "lexExp5 (e : s) = lexExp4 e s (e `elem` 'e' : 'E' : []); lexExp5 wyx = lexExp3 wyx; " The following Function with conditions "lexFracExp ('.' : c : cs)|isDigit cconcatMap lexFracExp1 (lexDigits (c : cs)); lexFracExp s = lexExp s; " is transformed to "lexFracExp (wyz : wzw) = lexFracExp5 (wyz : wzw); lexFracExp s = lexFracExp2 s; " "lexFracExp2 s = lexExp s; " "lexFracExp3 wyz c cs True = concatMap lexFracExp1 (lexDigits (c : cs)); lexFracExp3 wyz c cs False = lexFracExp2 (wyz : c : cs); " "lexFracExp4 True (wyz : c : cs) = lexFracExp3 wyz c cs (isDigit c); lexFracExp4 wzx wzy = lexFracExp2 wzy; " "lexFracExp5 (wyz : wzw) = lexFracExp4 (wyz == '.') (wyz : wzw); lexFracExp5 wzz = lexFracExp2 wzz; " The following Function with conditions "lex [] = ([],[]) : []; lex (c : s)|isSpace clex (dropWhile isSpace s); lex (''' : s) = concatMap lex0 (lexLitChar s); lex ('"' : s) = concatMap lex1 (lexString s) where { lex1 vu55 = lex10 vu55; ; lex10 (str,t) = ('"' : str,t) : []; lex10 wz = []; ; lexStrItem ('\' : '&' : s) = ('\' : '&' : [],s) : []; lexStrItem ('\' : c : s)|isSpace cconcatMap lexStrItem0 (dropWhile isSpace s : []); lexStrItem s = lexLitChar s; ; lexStrItem0 vu58 = lexStrItem00 vu58; ; lexStrItem00 ('\' : t) = ([],t) : []; lexStrItem00 wy = []; ; lexString ('"' : s) = ('"' : [],s) : []; lexString s = concatMap lexString1 (lexStrItem s); ; lexString0 ch vu56 = lexString00 ch vu56; ; lexString00 ch (str,u) = (ch ++ str,u) : []; lexString00 ch ww = []; ; lexString1 vu57 = lexString10 vu57; ; lexString10 (ch,t) = concatMap (lexString0 ch) (lexString t); lexString10 wx = []; } ; lex (c : s)|isSingle c(c : [],s) : []|isSym cconcatMap (lex2 c) (span isSym s : [])|isAlpha cconcatMap (lex3 c) (span isIdChar s : [])|isDigit cconcatMap (lex5 c) (span isDigit s : [])|otherwise[] where { isIdChar c = isAlphaNum c || c `elem` '_' : ''' : []; ; isSingle c = c `elem` ',' : ';' : '(' : ')' : '[' : ']' : '{' : '}' : '_' : '`' : []; ; isSym c = c `elem` '!' : '@' : '#' : '$' : '%' : '&' : '*' : '+' : '.' : '/' : '<' : '=' : '>' : '?' : '\' : '^' : '|' : ':' : '-' : '~' : []; ; lex2 c vu59 = lex20 c vu59; ; lex20 c (sym,t) = (c : sym,t) : []; lex20 c yv = []; ; lex3 c vu60 = lex30 c vu60; ; lex30 c (nam,t) = (c : nam,t) : []; lex30 c yw = []; ; lex4 c ds vu61 = lex40 c ds vu61; ; lex40 c ds (fe,t) = (c : ds ++ fe,t) : []; lex40 c ds xz = []; ; lex5 c vu62 = lex50 c vu62; ; lex50 c (ds,s) = concatMap (lex4 c ds) (lexFracExp s); lex50 c yu = []; ; lexExp (e : s)|e `elem` 'e' : 'E' : []concatMap (lexExp1 e) (s : []) ++ concatMap (lexExp2 e) (lexDigits s); lexExp s = ([],s) : []; ; lexExp0 e c vu65 = lexExp00 e c vu65; ; lexExp00 e c (ds,u) = (e : c : ds,u) : []; lexExp00 e c xu = []; ; lexExp1 e vu66 = lexExp10 e vu66; ; lexExp10 e (c : t) = lexExp100 e c t (c `elem` '+' : '-' : []); lexExp10 e xw = []; ; lexExp100 e c t True = concatMap (lexExp0 e c) (lexDigits t); lexExp100 e c t False = []; ; lexExp2 e vu67 = lexExp20 e vu67; ; lexExp20 e (ds,t) = (e : ds,t) : []; lexExp20 e xv = []; ; lexFracExp ('.' : c : cs)|isDigit cconcatMap lexFracExp1 (lexDigits (c : cs)); lexFracExp s = lexExp s; ; lexFracExp0 ds vu63 = lexFracExp00 ds vu63; ; lexFracExp00 ds (e,u) = ('.' : ds ++ e,u) : []; lexFracExp00 ds xy = []; ; lexFracExp1 vu64 = lexFracExp10 vu64; ; lexFracExp10 (ds,t) = concatMap (lexFracExp0 ds) (lexExp t); lexFracExp10 xx = []; } ; " is transformed to "lex [] = lex19 []; lex (c : s) = lex18 (c : s); lex (xvv : s) = lex16 (xvv : s); lex (xuw : s) = lex14 (xuw : s); lex (c : s) = lex12 (c : s); " "lex12 (c : s) = lex11 c s (isSingle c) where { isIdChar c = isAlphaNum c || c `elem` '_' : ''' : []; ; isSingle c = c `elem` ',' : ';' : '(' : ')' : '[' : ']' : '{' : '}' : '_' : '`' : []; ; isSym c = c `elem` '!' : '@' : '#' : '$' : '%' : '&' : '*' : '+' : '.' : '/' : '<' : '=' : '>' : '?' : '\' : '^' : '|' : ':' : '-' : '~' : []; ; lex11 c s True = (c : [],s) : []; lex11 c s False = lex9 c s (isSym c); ; lex2 c vu59 = lex20 c vu59; ; lex20 c (sym,t) = (c : sym,t) : []; lex20 c yv = []; ; lex3 c vu60 = lex30 c vu60; ; lex30 c (nam,t) = (c : nam,t) : []; lex30 c yw = []; ; lex4 c ds vu61 = lex40 c ds vu61; ; lex40 c ds (fe,t) = (c : ds ++ fe,t) : []; lex40 c ds xz = []; ; lex5 c vu62 = lex50 c vu62; ; lex50 c (ds,s) = concatMap (lex4 c ds) (lexFracExp s); lex50 c yu = []; ; lex6 c s True = []; ; lex7 c s True = concatMap (lex5 c) (span isDigit s : []); lex7 c s False = lex6 c s otherwise; ; lex8 c s True = concatMap (lex3 c) (span isIdChar s : []); lex8 c s False = lex7 c s (isDigit c); ; lex9 c s True = concatMap (lex2 c) (span isSym s : []); lex9 c s False = lex8 c s (isAlpha c); ; lexExp (e : s) = lexExp5 (e : s); lexExp s = lexExp3 s; ; lexExp0 e c vu65 = lexExp00 e c vu65; ; lexExp00 e c (ds,u) = (e : c : ds,u) : []; lexExp00 e c xu = []; ; lexExp1 e vu66 = lexExp10 e vu66; ; lexExp10 e (c : t) = lexExp100 e c t (c `elem` '+' : '-' : []); lexExp10 e xw = []; ; lexExp100 e c t True = concatMap (lexExp0 e c) (lexDigits t); lexExp100 e c t False = []; ; lexExp2 e vu67 = lexExp20 e vu67; ; lexExp20 e (ds,t) = (e : ds,t) : []; lexExp20 e xv = []; ; lexExp3 s = ([],s) : []; ; lexExp4 e s True = concatMap (lexExp1 e) (s : []) ++ concatMap (lexExp2 e) (lexDigits s); lexExp4 e s False = lexExp3 (e : s); ; lexExp5 (e : s) = lexExp4 e s (e `elem` 'e' : 'E' : []); lexExp5 wyx = lexExp3 wyx; ; lexFracExp (wyz : wzw) = lexFracExp5 (wyz : wzw); lexFracExp s = lexFracExp2 s; ; lexFracExp0 ds vu63 = lexFracExp00 ds vu63; ; lexFracExp00 ds (e,u) = ('.' : ds ++ e,u) : []; lexFracExp00 ds xy = []; ; lexFracExp1 vu64 = lexFracExp10 vu64; ; lexFracExp10 (ds,t) = concatMap (lexFracExp0 ds) (lexExp t); lexFracExp10 xx = []; ; lexFracExp2 s = lexExp s; ; lexFracExp3 wyz c cs True = concatMap lexFracExp1 (lexDigits (c : cs)); lexFracExp3 wyz c cs False = lexFracExp2 (wyz : c : cs); ; lexFracExp4 True (wyz : c : cs) = lexFracExp3 wyz c cs (isDigit c); lexFracExp4 wzx wzy = lexFracExp2 wzy; ; lexFracExp5 (wyz : wzw) = lexFracExp4 (wyz == '.') (wyz : wzw); lexFracExp5 wzz = lexFracExp2 wzz; } ; " "lex13 True (xuw : s) = concatMap lex1 (lexString s) where { lex1 vu55 = lex10 vu55; ; lex10 (str,t) = ('"' : str,t) : []; lex10 wz = []; ; lexStrItem (wvz : wwx) = lexStrItem7 (wvz : wwx); lexStrItem (wux : wvu) = lexStrItem4 (wux : wvu); lexStrItem s = lexStrItem1 s; ; lexStrItem0 vu58 = lexStrItem00 vu58; ; lexStrItem00 (wxy : t) = lexStrItem002 (wxy : t); lexStrItem00 wy = lexStrItem000 wy; ; lexStrItem000 wy = []; ; lexStrItem001 True (wxy : t) = ([],t) : []; lexStrItem001 wxz wyu = lexStrItem000 wyu; ; lexStrItem002 (wxy : t) = lexStrItem001 (wxy == '\') (wxy : t); lexStrItem002 wyv = lexStrItem000 wyv; ; lexStrItem1 s = lexLitChar s; ; lexStrItem2 wux c s True = concatMap lexStrItem0 (dropWhile isSpace s : []); lexStrItem2 wux c s False = lexStrItem1 (wux : c : s); ; lexStrItem3 True (wux : c : s) = lexStrItem2 wux c s (isSpace c); lexStrItem3 wvv wvw = lexStrItem1 wvw; ; lexStrItem4 (wux : wvu) = lexStrItem3 (wux == '\') (wux : wvu); lexStrItem4 wvx = lexStrItem1 wvx; ; lexStrItem5 True (wvz : wwv : s) = ('\' : '&' : [],s) : []; lexStrItem5 wwy wwz = lexStrItem4 wwz; ; lexStrItem6 True (wvz : wwv : s) = lexStrItem5 (wwv == '&') (wvz : wwv : s); lexStrItem6 wxu wxv = lexStrItem4 wxv; ; lexStrItem7 (wvz : wwx) = lexStrItem6 (wvz == '\') (wvz : wwx); lexStrItem7 wxw = lexStrItem4 wxw; ; lexString (vzy : s) = lexString4 (vzy : s); lexString s = lexString2 s; ; lexString0 ch vu56 = lexString00 ch vu56; ; lexString00 ch (str,u) = (ch ++ str,u) : []; lexString00 ch ww = []; ; lexString1 vu57 = lexString10 vu57; ; lexString10 (ch,t) = concatMap (lexString0 ch) (lexString t); lexString10 wx = []; ; lexString2 s = concatMap lexString1 (lexStrItem s); ; lexString3 True (vzy : s) = ('"' : [],s) : []; lexString3 vzz wuu = lexString2 wuu; ; lexString4 (vzy : s) = lexString3 (vzy == '"') (vzy : s); lexString4 wuv = lexString2 wuv; } ; lex13 xux xuy = lex12 xuy; " "lex14 (xuw : s) = lex13 (xuw == '"') (xuw : s); lex14 xuz = lex12 xuz; " "lex15 True (xvv : s) = concatMap lex0 (lexLitChar s); lex15 xvw xvx = lex14 xvx; " "lex16 (xvv : s) = lex15 (xvv == ''') (xvv : s); lex16 xvy = lex14 xvy; " "lex17 c s True = lex (dropWhile isSpace s); lex17 c s False = lex16 (c : s); " "lex18 (c : s) = lex17 c s (isSpace c); lex18 xwu = lex16 xwu; " "lex19 [] = ([],[]) : []; lex19 xww = lex18 xww; " The following Function with conditions "readsPrec10 ('(' : [],s) = concatMap readsPrec0 (lex s); readsPrec10 yy = []; " is transformed to "readsPrec10 (xwz : xxu,s) = readsPrec102 (xwz : xxu,s); readsPrec10 yy = readsPrec100 yy; " "readsPrec100 yy = []; " "readsPrec101 True (xwz : [],s) = concatMap readsPrec0 (lex s); readsPrec101 xxv xxw = readsPrec100 xxw; " "readsPrec102 (xwz : xxu,s) = readsPrec101 (xwz == '(') (xwz : xxu,s); readsPrec102 xxx = readsPrec100 xxx; " The following Function with conditions "getChar |terminatorreturn terminator|otherwiseaIOE IOError_EOF; " is transformed to "getChar = getChar2; " "getChar1 True = return terminator; getChar1 False = getChar0 otherwise; " "getChar0 True = aIOE IOError_EOF; " "getChar2 = getChar1 terminator; " The following Function with conditions "lexmatch (x : xs) (y : ys)|x == ylexmatch xs ys; lexmatch xs ys = (xs,ys); " is transformed to "lexmatch (x : xs) (y : ys) = lexmatch2 (x : xs) (y : ys); lexmatch xs ys = lexmatch0 xs ys; " "lexmatch0 xs ys = (xs,ys); " "lexmatch1 x xs y ys True = lexmatch xs ys; lexmatch1 x xs y ys False = lexmatch0 (x : xs) (y : ys); " "lexmatch2 (x : xs) (y : ys) = lexmatch1 x xs y ys (x == y); lexmatch2 xyu xyv = lexmatch0 xyu xyv; " The following Function with conditions "undefined |Falseundefined; " is transformed to "undefined = undefined1; " "undefined0 True = undefined; " "undefined1 = undefined0 False; " The following Function with conditions "mandatory20 ('(' : [],s) = concatMap mandatory1 (optional s); mandatory20 vuv = []; " is transformed to "mandatory20 (xyy : xyz,s) = mandatory202 (xyy : xyz,s); mandatory20 vuv = mandatory200 vuv; " "mandatory200 vuv = []; " "mandatory201 True (xyy : [],s) = concatMap mandatory1 (optional s); mandatory201 xzu xzv = mandatory200 xzv; " "mandatory202 (xyy : xyz,s) = mandatory201 (xyy == '(') (xyy : xyz,s); mandatory202 xzw = mandatory200 xzw; " The following Function with conditions "mandatory00 x (')' : [],u) = (x,u) : []; mandatory00 x vuw = []; " is transformed to "mandatory00 x (xzz : yuu,u) = mandatory002 x (xzz : yuu,u); mandatory00 x vuw = mandatory000 x vuw; " "mandatory000 x vuw = []; " "mandatory001 True x (xzz : [],u) = (x,u) : []; mandatory001 yuv yuw yux = mandatory000 yuw yux; " "mandatory002 x (xzz : yuu,u) = mandatory001 (xzz == ')') x (xzz : yuu,u); mandatory002 yuy yuz = mandatory000 yuy yuz; " The following Function with conditions "dropWhile p [] = []; dropWhile p (vuy : vuz)|p vuydropWhile p vuz|otherwisevuy : vuz; " is transformed to "dropWhile p [] = dropWhile3 p []; dropWhile p (vuy : vuz) = dropWhile2 p (vuy : vuz); " "dropWhile1 p vuy vuz True = dropWhile p vuz; dropWhile1 p vuy vuz False = dropWhile0 p vuy vuz otherwise; " "dropWhile0 p vuy vuz True = vuy : vuz; " "dropWhile2 p (vuy : vuz) = dropWhile1 p vuy vuz (p vuy); " "dropWhile3 p [] = []; dropWhile3 yvw yvx = dropWhile2 yvw yvx; " The following Function with conditions "lex00 (ch,''' : t) = lex000 ch t (ch /= ''' : []); lex00 vvv = []; " is transformed to "lex00 (ch,ywu : t) = lex003 (ch,ywu : t); lex00 vvv = lex001 vvv; " "lex001 vvv = []; " "lex002 True (ch,ywu : t) = lex000 ch t (ch /= ''' : []); lex002 ywv yww = lex001 yww; " "lex003 (ch,ywu : t) = lex002 (ywu == ''') (ch,ywu : t); lex003 ywx = lex001 ywx; " The following Function with conditions "lexEsc (c : s)|c `elem` 'a' : 'b' : 'f' : 'n' : 'r' : 't' : 'v' : '\' : '"' : ''' : [](c : [],s) : []; lexEsc ('^' : c : s)|c >= '@' && c <= '_'('^' : c : [],s) : []; lexEsc ('o' : s) = prefix 'o' (span isOctDigit s) : []; lexEsc ('x' : s) = prefix 'x' (span isHexDigit s) : []; lexEsc (vvx : vvy)|isDigit vvxspan isDigit (vvx : vvy) : []|isUpper vvxlexEsc2 (concatMap (lexEsc1 (vvx : vvy)) table); lexEsc vvz = []; " is transformed to "lexEsc (c : s) = lexEsc16 (c : s); lexEsc (yyz : yzw) = lexEsc14 (yyz : yzw); lexEsc (yyu : s) = lexEsc11 (yyu : s); lexEsc (yxv : s) = lexEsc8 (yxv : s); lexEsc (vvx : vvy) = lexEsc6 (vvx : vvy); lexEsc vvz = lexEsc3 vvz; " "lexEsc3 vvz = []; " "lexEsc5 vvx vvy True = span isDigit (vvx : vvy) : []; lexEsc5 vvx vvy False = lexEsc4 vvx vvy (isUpper vvx); " "lexEsc4 vvx vvy True = lexEsc2 (concatMap (lexEsc1 (vvx : vvy)) table); lexEsc4 vvx vvy False = lexEsc3 (vvx : vvy); " "lexEsc6 (vvx : vvy) = lexEsc5 vvx vvy (isDigit vvx); lexEsc6 ywz = lexEsc3 ywz; " "lexEsc7 True (yxv : s) = prefix 'x' (span isHexDigit s) : []; lexEsc7 yxw yxx = lexEsc6 yxx; " "lexEsc8 (yxv : s) = lexEsc7 (yxv == 'x') (yxv : s); lexEsc8 yxy = lexEsc6 yxy; " "lexEsc9 True (yyu : s) = prefix 'o' (span isOctDigit s) : []; lexEsc9 yyv yyw = lexEsc8 yyw; " "lexEsc11 (yyu : s) = lexEsc9 (yyu == 'o') (yyu : s); lexEsc11 yyx = lexEsc8 yyx; " "lexEsc12 yyz c s True = ('^' : c : [],s) : []; lexEsc12 yyz c s False = lexEsc11 (yyz : c : s); " "lexEsc13 True (yyz : c : s) = lexEsc12 yyz c s (c >= '@' && c <= '_'); lexEsc13 yzx yzy = lexEsc11 yzy; " "lexEsc14 (yyz : yzw) = lexEsc13 (yyz == '^') (yyz : yzw); lexEsc14 yzz = lexEsc11 yzz; " "lexEsc15 c s True = (c : [],s) : []; lexEsc15 c s False = lexEsc14 (c : s); " "lexEsc16 (c : s) = lexEsc15 c s (c `elem` 'a' : 'b' : 'f' : 'n' : 'r' : 't' : 'v' : '\' : '"' : ''' : []); lexEsc16 zuv = lexEsc14 zuv; " The following Function with conditions "lexLitChar [] = []; lexLitChar (c : s)|c /= '\'(c : [],s) : []|otherwisemap (prefix '\') (lexEsc s) where { lexEsc (c : s)|c `elem` 'a' : 'b' : 'f' : 'n' : 'r' : 't' : 'v' : '\' : '"' : ''' : [](c : [],s) : []; lexEsc ('^' : c : s)|c >= '@' && c <= '_'('^' : c : [],s) : []; lexEsc ('o' : s) = prefix 'o' (span isOctDigit s) : []; lexEsc ('x' : s) = prefix 'x' (span isHexDigit s) : []; lexEsc (vvx : vvy)|isDigit vvxspan isDigit (vvx : vvy) : []|isUpper vvxlexEsc2 (concatMap (lexEsc1 (vvx : vvy)) table); lexEsc vvz = []; ; lexEsc0 mne vu69 = lexEsc00 mne vu69; ; lexEsc00 mne ([],s') = (mne,s') : []; lexEsc00 mne vwv = []; ; lexEsc1 s vu70 = lexEsc10 s vu70; ; lexEsc10 s (c,mne) = concatMap (lexEsc0 mne) (lexmatch mne s : []); lexEsc10 s vww = []; ; lexEsc2 (pr : vwu) = pr : []; lexEsc2 [] = []; ; prefix c (t,s) = (c : t,s); ; table = ('\127','D' : 'E' : 'L' : []) : asciiTab; } ; " is transformed to "lexLitChar [] = lexLitChar3 []; lexLitChar (c : s) = lexLitChar2 (c : s); " "lexLitChar2 (c : s) = lexLitChar1 c s (c /= '\') where { lexEsc (c : s) = lexEsc16 (c : s); lexEsc (yyz : yzw) = lexEsc14 (yyz : yzw); lexEsc (yyu : s) = lexEsc11 (yyu : s); lexEsc (yxv : s) = lexEsc8 (yxv : s); lexEsc (vvx : vvy) = lexEsc6 (vvx : vvy); lexEsc vvz = lexEsc3 vvz; ; lexEsc0 mne vu69 = lexEsc00 mne vu69; ; lexEsc00 mne ([],s') = (mne,s') : []; lexEsc00 mne vwv = []; ; lexEsc1 s vu70 = lexEsc10 s vu70; ; lexEsc10 s (c,mne) = concatMap (lexEsc0 mne) (lexmatch mne s : []); lexEsc10 s vww = []; ; lexEsc11 (yyu : s) = lexEsc9 (yyu == 'o') (yyu : s); lexEsc11 yyx = lexEsc8 yyx; ; lexEsc12 yyz c s True = ('^' : c : [],s) : []; lexEsc12 yyz c s False = lexEsc11 (yyz : c : s); ; lexEsc13 True (yyz : c : s) = lexEsc12 yyz c s (c >= '@' && c <= '_'); lexEsc13 yzx yzy = lexEsc11 yzy; ; lexEsc14 (yyz : yzw) = lexEsc13 (yyz == '^') (yyz : yzw); lexEsc14 yzz = lexEsc11 yzz; ; lexEsc15 c s True = (c : [],s) : []; lexEsc15 c s False = lexEsc14 (c : s); ; lexEsc16 (c : s) = lexEsc15 c s (c `elem` 'a' : 'b' : 'f' : 'n' : 'r' : 't' : 'v' : '\' : '"' : ''' : []); lexEsc16 zuv = lexEsc14 zuv; ; lexEsc2 (pr : vwu) = pr : []; lexEsc2 [] = []; ; lexEsc3 vvz = []; ; lexEsc4 vvx vvy True = lexEsc2 (concatMap (lexEsc1 (vvx : vvy)) table); lexEsc4 vvx vvy False = lexEsc3 (vvx : vvy); ; lexEsc5 vvx vvy True = span isDigit (vvx : vvy) : []; lexEsc5 vvx vvy False = lexEsc4 vvx vvy (isUpper vvx); ; lexEsc6 (vvx : vvy) = lexEsc5 vvx vvy (isDigit vvx); lexEsc6 ywz = lexEsc3 ywz; ; lexEsc7 True (yxv : s) = prefix 'x' (span isHexDigit s) : []; lexEsc7 yxw yxx = lexEsc6 yxx; ; lexEsc8 (yxv : s) = lexEsc7 (yxv == 'x') (yxv : s); lexEsc8 yxy = lexEsc6 yxy; ; lexEsc9 True (yyu : s) = prefix 'o' (span isOctDigit s) : []; lexEsc9 yyv yyw = lexEsc8 yyw; ; lexLitChar0 c s True = map (prefix '\') (lexEsc s); ; lexLitChar1 c s True = (c : [],s) : []; lexLitChar1 c s False = lexLitChar0 c s otherwise; ; prefix c (t,s) = (c : t,s); ; table = ('\127','D' : 'E' : 'L' : []) : asciiTab; } ; " "lexLitChar3 [] = []; lexLitChar3 zuy = lexLitChar2 zuy; " The following Function with conditions "span p [] = ([],[]); span p (vwx : vwy)|p vwx(vwx : ys,zs)|otherwise([],vwx : vwy) where { vu43 = span p vwy; ; ys = ys0 vu43; ; ys0 (ys,vxu) = ys; ; zs = zs0 vu43; ; zs0 (vwz,zs) = zs; } ; " is transformed to "span p [] = span3 p []; span p (vwx : vwy) = span2 p (vwx : vwy); " "span2 p (vwx : vwy) = span1 p vwx vwy (p vwx) where { span0 p vwx vwy True = ([],vwx : vwy); ; span1 p vwx vwy True = (vwx : ys,zs); span1 p vwx vwy False = span0 p vwx vwy otherwise; ; vu43 = span p vwy; ; ys = ys0 vu43; ; ys0 (ys,vxu) = ys; ; zs = zs0 vu43; ; zs0 (vwz,zs) = zs; } ; " "span3 p [] = ([],[]); span3 zvv zvw = span2 zvv zvw; " ---------------------------------------- (10) Obligation: mainModule Main module Main where { import qualified Prelude; } ---------------------------------------- (11) LetRed (EQUIVALENT) Let/Where Reductions: The bindings of the following Let/Where expression "lexLitChar1 c s (c /= '\') where { lexEsc (c : s) = lexEsc16 (c : s); lexEsc (yyz : yzw) = lexEsc14 (yyz : yzw); lexEsc (yyu : s) = lexEsc11 (yyu : s); lexEsc (yxv : s) = lexEsc8 (yxv : s); lexEsc (vvx : vvy) = lexEsc6 (vvx : vvy); lexEsc vvz = lexEsc3 vvz; ; lexEsc0 mne vu69 = lexEsc00 mne vu69; ; lexEsc00 mne ([],s') = (mne,s') : []; lexEsc00 mne vwv = []; ; lexEsc1 s vu70 = lexEsc10 s vu70; ; lexEsc10 s (c,mne) = concatMap (lexEsc0 mne) (lexmatch mne s : []); lexEsc10 s vww = []; ; lexEsc11 (yyu : s) = lexEsc9 (yyu == 'o') (yyu : s); lexEsc11 yyx = lexEsc8 yyx; ; lexEsc12 yyz c s True = ('^' : c : [],s) : []; lexEsc12 yyz c s False = lexEsc11 (yyz : c : s); ; lexEsc13 True (yyz : c : s) = lexEsc12 yyz c s (c >= '@' && c <= '_'); lexEsc13 yzx yzy = lexEsc11 yzy; ; lexEsc14 (yyz : yzw) = lexEsc13 (yyz == '^') (yyz : yzw); lexEsc14 yzz = lexEsc11 yzz; ; lexEsc15 c s True = (c : [],s) : []; lexEsc15 c s False = lexEsc14 (c : s); ; lexEsc16 (c : s) = lexEsc15 c s (c `elem` 'a' : 'b' : 'f' : 'n' : 'r' : 't' : 'v' : '\' : '"' : ''' : []); lexEsc16 zuv = lexEsc14 zuv; ; lexEsc2 (pr : vwu) = pr : []; lexEsc2 [] = []; ; lexEsc3 vvz = []; ; lexEsc4 vvx vvy True = lexEsc2 (concatMap (lexEsc1 (vvx : vvy)) table); lexEsc4 vvx vvy False = lexEsc3 (vvx : vvy); ; lexEsc5 vvx vvy True = span isDigit (vvx : vvy) : []; lexEsc5 vvx vvy False = lexEsc4 vvx vvy (isUpper vvx); ; lexEsc6 (vvx : vvy) = lexEsc5 vvx vvy (isDigit vvx); lexEsc6 ywz = lexEsc3 ywz; ; lexEsc7 True (yxv : s) = prefix 'x' (span isHexDigit s) : []; lexEsc7 yxw yxx = lexEsc6 yxx; ; lexEsc8 (yxv : s) = lexEsc7 (yxv == 'x') (yxv : s); lexEsc8 yxy = lexEsc6 yxy; ; lexEsc9 True (yyu : s) = prefix 'o' (span isOctDigit s) : []; lexEsc9 yyv yyw = lexEsc8 yyw; ; lexLitChar0 c s True = map (prefix '\') (lexEsc s); ; lexLitChar1 c s True = (c : [],s) : []; lexLitChar1 c s False = lexLitChar0 c s otherwise; ; prefix c (t,s) = (c : t,s); ; table = ('\127','D' : 'E' : 'L' : []) : asciiTab; } " are unpacked to the following functions on top level "lexLitChar2LexEsc8 (yxv : s) = lexLitChar2LexEsc7 (yxv == 'x') (yxv : s); lexLitChar2LexEsc8 yxy = lexLitChar2LexEsc6 yxy; " "lexLitChar2LexEsc (c : s) = lexLitChar2LexEsc16 (c : s); lexLitChar2LexEsc (yyz : yzw) = lexLitChar2LexEsc14 (yyz : yzw); lexLitChar2LexEsc (yyu : s) = lexLitChar2LexEsc11 (yyu : s); lexLitChar2LexEsc (yxv : s) = lexLitChar2LexEsc8 (yxv : s); lexLitChar2LexEsc (vvx : vvy) = lexLitChar2LexEsc6 (vvx : vvy); lexLitChar2LexEsc vvz = lexLitChar2LexEsc3 vvz; " "lexLitChar2LexEsc6 (vvx : vvy) = lexLitChar2LexEsc5 vvx vvy (isDigit vvx); lexLitChar2LexEsc6 ywz = lexLitChar2LexEsc3 ywz; " "lexLitChar2LexEsc7 True (yxv : s) = lexLitChar2Prefix 'x' (span isHexDigit s) : []; lexLitChar2LexEsc7 yxw yxx = lexLitChar2LexEsc6 yxx; " "lexLitChar2LexEsc13 True (yyz : c : s) = lexLitChar2LexEsc12 yyz c s (c >= '@' && c <= '_'); lexLitChar2LexEsc13 yzx yzy = lexLitChar2LexEsc11 yzy; " "lexLitChar2LexEsc2 (pr : vwu) = pr : []; lexLitChar2LexEsc2 [] = []; " "lexLitChar2LexEsc10 s (c,mne) = concatMap (lexLitChar2LexEsc0 mne) (lexmatch mne s : []); lexLitChar2LexEsc10 s vww = []; " "lexLitChar2LexEsc1 s vu70 = lexLitChar2LexEsc10 s vu70; " "lexLitChar2LexLitChar1 c s True = (c : [],s) : []; lexLitChar2LexLitChar1 c s False = lexLitChar2LexLitChar0 c s otherwise; " "lexLitChar2LexEsc0 mne vu69 = lexLitChar2LexEsc00 mne vu69; " "lexLitChar2LexEsc16 (c : s) = lexLitChar2LexEsc15 c s (c `elem` 'a' : 'b' : 'f' : 'n' : 'r' : 't' : 'v' : '\' : '"' : ''' : []); lexLitChar2LexEsc16 zuv = lexLitChar2LexEsc14 zuv; " "lexLitChar2LexEsc5 vvx vvy True = span isDigit (vvx : vvy) : []; lexLitChar2LexEsc5 vvx vvy False = lexLitChar2LexEsc4 vvx vvy (isUpper vvx); " "lexLitChar2LexEsc00 mne ([],s') = (mne,s') : []; lexLitChar2LexEsc00 mne vwv = []; " "lexLitChar2LexEsc3 vvz = []; " "lexLitChar2Prefix c (t,s) = (c : t,s); " "lexLitChar2LexEsc12 yyz c s True = ('^' : c : [],s) : []; lexLitChar2LexEsc12 yyz c s False = lexLitChar2LexEsc11 (yyz : c : s); " "lexLitChar2LexEsc14 (yyz : yzw) = lexLitChar2LexEsc13 (yyz == '^') (yyz : yzw); lexLitChar2LexEsc14 yzz = lexLitChar2LexEsc11 yzz; " "lexLitChar2LexEsc4 vvx vvy True = lexLitChar2LexEsc2 (concatMap (lexLitChar2LexEsc1 (vvx : vvy)) lexLitChar2Table); lexLitChar2LexEsc4 vvx vvy False = lexLitChar2LexEsc3 (vvx : vvy); " "lexLitChar2LexEsc15 c s True = (c : [],s) : []; lexLitChar2LexEsc15 c s False = lexLitChar2LexEsc14 (c : s); " "lexLitChar2LexLitChar0 c s True = map (lexLitChar2Prefix '\') (lexLitChar2LexEsc s); " "lexLitChar2LexEsc11 (yyu : s) = lexLitChar2LexEsc9 (yyu == 'o') (yyu : s); lexLitChar2LexEsc11 yyx = lexLitChar2LexEsc8 yyx; " "lexLitChar2Table = ('\127','D' : 'E' : 'L' : []) : asciiTab; " "lexLitChar2LexEsc9 True (yyu : s) = lexLitChar2Prefix 'o' (span isOctDigit s) : []; lexLitChar2LexEsc9 yyv yyw = lexLitChar2LexEsc8 yyw; " The bindings of the following Let/Where expression "concatMap lex1 (lexString s) where { lex1 vu55 = lex10 vu55; ; lex10 (str,t) = ('"' : str,t) : []; lex10 wz = []; ; lexStrItem (wvz : wwx) = lexStrItem7 (wvz : wwx); lexStrItem (wux : wvu) = lexStrItem4 (wux : wvu); lexStrItem s = lexStrItem1 s; ; lexStrItem0 vu58 = lexStrItem00 vu58; ; lexStrItem00 (wxy : t) = lexStrItem002 (wxy : t); lexStrItem00 wy = lexStrItem000 wy; ; lexStrItem000 wy = []; ; lexStrItem001 True (wxy : t) = ([],t) : []; lexStrItem001 wxz wyu = lexStrItem000 wyu; ; lexStrItem002 (wxy : t) = lexStrItem001 (wxy == '\') (wxy : t); lexStrItem002 wyv = lexStrItem000 wyv; ; lexStrItem1 s = lexLitChar s; ; lexStrItem2 wux c s True = concatMap lexStrItem0 (dropWhile isSpace s : []); lexStrItem2 wux c s False = lexStrItem1 (wux : c : s); ; lexStrItem3 True (wux : c : s) = lexStrItem2 wux c s (isSpace c); lexStrItem3 wvv wvw = lexStrItem1 wvw; ; lexStrItem4 (wux : wvu) = lexStrItem3 (wux == '\') (wux : wvu); lexStrItem4 wvx = lexStrItem1 wvx; ; lexStrItem5 True (wvz : wwv : s) = ('\' : '&' : [],s) : []; lexStrItem5 wwy wwz = lexStrItem4 wwz; ; lexStrItem6 True (wvz : wwv : s) = lexStrItem5 (wwv == '&') (wvz : wwv : s); lexStrItem6 wxu wxv = lexStrItem4 wxv; ; lexStrItem7 (wvz : wwx) = lexStrItem6 (wvz == '\') (wvz : wwx); lexStrItem7 wxw = lexStrItem4 wxw; ; lexString (vzy : s) = lexString4 (vzy : s); lexString s = lexString2 s; ; lexString0 ch vu56 = lexString00 ch vu56; ; lexString00 ch (str,u) = (ch ++ str,u) : []; lexString00 ch ww = []; ; lexString1 vu57 = lexString10 vu57; ; lexString10 (ch,t) = concatMap (lexString0 ch) (lexString t); lexString10 wx = []; ; lexString2 s = concatMap lexString1 (lexStrItem s); ; lexString3 True (vzy : s) = ('"' : [],s) : []; lexString3 vzz wuu = lexString2 wuu; ; lexString4 (vzy : s) = lexString3 (vzy == '"') (vzy : s); lexString4 wuv = lexString2 wuv; } " are unpacked to the following functions on top level "lex13LexStrItem002 (wxy : t) = lex13LexStrItem001 (wxy == '\') (wxy : t); lex13LexStrItem002 wyv = lex13LexStrItem000 wyv; " "lex13LexStrItem000 wy = []; " "lex13LexStrItem3 True (wux : c : s) = lex13LexStrItem2 wux c s (isSpace c); lex13LexStrItem3 wvv wvw = lex13LexStrItem1 wvw; " "lex13LexStrItem5 True (wvz : wwv : s) = ('\' : '&' : [],s) : []; lex13LexStrItem5 wwy wwz = lex13LexStrItem4 wwz; " "lex13LexString1 vu57 = lex13LexString10 vu57; " "lex13Lex10 (str,t) = ('"' : str,t) : []; lex13Lex10 wz = []; " "lex13LexString (vzy : s) = lex13LexString4 (vzy : s); lex13LexString s = lex13LexString2 s; " "lex13LexString10 (ch,t) = concatMap (lex13LexString0 ch) (lex13LexString t); lex13LexString10 wx = []; " "lex13LexString00 ch (str,u) = (ch ++ str,u) : []; lex13LexString00 ch ww = []; " "lex13LexStrItem1 s = lexLitChar s; " "lex13LexStrItem2 wux c s True = concatMap lex13LexStrItem0 (dropWhile isSpace s : []); lex13LexStrItem2 wux c s False = lex13LexStrItem1 (wux : c : s); " "lex13LexStrItem001 True (wxy : t) = ([],t) : []; lex13LexStrItem001 wxz wyu = lex13LexStrItem000 wyu; " "lex13LexStrItem00 (wxy : t) = lex13LexStrItem002 (wxy : t); lex13LexStrItem00 wy = lex13LexStrItem000 wy; " "lex13Lex1 vu55 = lex13Lex10 vu55; " "lex13LexStrItem7 (wvz : wwx) = lex13LexStrItem6 (wvz == '\') (wvz : wwx); lex13LexStrItem7 wxw = lex13LexStrItem4 wxw; " "lex13LexStrItem (wvz : wwx) = lex13LexStrItem7 (wvz : wwx); lex13LexStrItem (wux : wvu) = lex13LexStrItem4 (wux : wvu); lex13LexStrItem s = lex13LexStrItem1 s; " "lex13LexStrItem0 vu58 = lex13LexStrItem00 vu58; " "lex13LexStrItem6 True (wvz : wwv : s) = lex13LexStrItem5 (wwv == '&') (wvz : wwv : s); lex13LexStrItem6 wxu wxv = lex13LexStrItem4 wxv; " "lex13LexString4 (vzy : s) = lex13LexString3 (vzy == '"') (vzy : s); lex13LexString4 wuv = lex13LexString2 wuv; " "lex13LexString2 s = concatMap lex13LexString1 (lex13LexStrItem s); " "lex13LexString0 ch vu56 = lex13LexString00 ch vu56; " "lex13LexString3 True (vzy : s) = ('"' : [],s) : []; lex13LexString3 vzz wuu = lex13LexString2 wuu; " "lex13LexStrItem4 (wux : wvu) = lex13LexStrItem3 (wux == '\') (wux : wvu); lex13LexStrItem4 wvx = lex13LexStrItem1 wvx; " The bindings of the following Let/Where expression "span1 p vwx vwy (p vwx) where { span0 p vwx vwy True = ([],vwx : vwy); ; span1 p vwx vwy True = (vwx : ys,zs); span1 p vwx vwy False = span0 p vwx vwy otherwise; ; vu43 = span p vwy; ; ys = ys0 vu43; ; ys0 (ys,vxu) = ys; ; zs = zs0 vu43; ; zs0 (vwz,zs) = zs; } " are unpacked to the following functions on top level "span2Ys0 zvx zvy (ys,vxu) = ys; " "span2Span1 zvx zvy p vwx vwy True = (vwx : span2Ys zvx zvy,span2Zs zvx zvy); span2Span1 zvx zvy p vwx vwy False = span2Span0 zvx zvy p vwx vwy otherwise; " "span2Zs0 zvx zvy (vwz,zs) = zs; " "span2Ys zvx zvy = span2Ys0 zvx zvy (span2Vu43 zvx zvy); " "span2Span0 zvx zvy p vwx vwy True = ([],vwx : vwy); " "span2Zs zvx zvy = span2Zs0 zvx zvy (span2Vu43 zvx zvy); " "span2Vu43 zvx zvy = span zvx zvy; " The bindings of the following Let/Where expression "lex11 c s (isSingle c) where { isIdChar c = isAlphaNum c || c `elem` '_' : ''' : []; ; isSingle c = c `elem` ',' : ';' : '(' : ')' : '[' : ']' : '{' : '}' : '_' : '`' : []; ; isSym c = c `elem` '!' : '@' : '#' : '$' : '%' : '&' : '*' : '+' : '.' : '/' : '<' : '=' : '>' : '?' : '\' : '^' : '|' : ':' : '-' : '~' : []; ; lex11 c s True = (c : [],s) : []; lex11 c s False = lex9 c s (isSym c); ; lex2 c vu59 = lex20 c vu59; ; lex20 c (sym,t) = (c : sym,t) : []; lex20 c yv = []; ; lex3 c vu60 = lex30 c vu60; ; lex30 c (nam,t) = (c : nam,t) : []; lex30 c yw = []; ; lex4 c ds vu61 = lex40 c ds vu61; ; lex40 c ds (fe,t) = (c : ds ++ fe,t) : []; lex40 c ds xz = []; ; lex5 c vu62 = lex50 c vu62; ; lex50 c (ds,s) = concatMap (lex4 c ds) (lexFracExp s); lex50 c yu = []; ; lex6 c s True = []; ; lex7 c s True = concatMap (lex5 c) (span isDigit s : []); lex7 c s False = lex6 c s otherwise; ; lex8 c s True = concatMap (lex3 c) (span isIdChar s : []); lex8 c s False = lex7 c s (isDigit c); ; lex9 c s True = concatMap (lex2 c) (span isSym s : []); lex9 c s False = lex8 c s (isAlpha c); ; lexExp (e : s) = lexExp5 (e : s); lexExp s = lexExp3 s; ; lexExp0 e c vu65 = lexExp00 e c vu65; ; lexExp00 e c (ds,u) = (e : c : ds,u) : []; lexExp00 e c xu = []; ; lexExp1 e vu66 = lexExp10 e vu66; ; lexExp10 e (c : t) = lexExp100 e c t (c `elem` '+' : '-' : []); lexExp10 e xw = []; ; lexExp100 e c t True = concatMap (lexExp0 e c) (lexDigits t); lexExp100 e c t False = []; ; lexExp2 e vu67 = lexExp20 e vu67; ; lexExp20 e (ds,t) = (e : ds,t) : []; lexExp20 e xv = []; ; lexExp3 s = ([],s) : []; ; lexExp4 e s True = concatMap (lexExp1 e) (s : []) ++ concatMap (lexExp2 e) (lexDigits s); lexExp4 e s False = lexExp3 (e : s); ; lexExp5 (e : s) = lexExp4 e s (e `elem` 'e' : 'E' : []); lexExp5 wyx = lexExp3 wyx; ; lexFracExp (wyz : wzw) = lexFracExp5 (wyz : wzw); lexFracExp s = lexFracExp2 s; ; lexFracExp0 ds vu63 = lexFracExp00 ds vu63; ; lexFracExp00 ds (e,u) = ('.' : ds ++ e,u) : []; lexFracExp00 ds xy = []; ; lexFracExp1 vu64 = lexFracExp10 vu64; ; lexFracExp10 (ds,t) = concatMap (lexFracExp0 ds) (lexExp t); lexFracExp10 xx = []; ; lexFracExp2 s = lexExp s; ; lexFracExp3 wyz c cs True = concatMap lexFracExp1 (lexDigits (c : cs)); lexFracExp3 wyz c cs False = lexFracExp2 (wyz : c : cs); ; lexFracExp4 True (wyz : c : cs) = lexFracExp3 wyz c cs (isDigit c); lexFracExp4 wzx wzy = lexFracExp2 wzy; ; lexFracExp5 (wyz : wzw) = lexFracExp4 (wyz == '.') (wyz : wzw); lexFracExp5 wzz = lexFracExp2 wzz; } " are unpacked to the following functions on top level "lex12LexFracExp00 ds (e,u) = ('.' : ds ++ e,u) : []; lex12LexFracExp00 ds xy = []; " "lex12Lex4 c ds vu61 = lex12Lex40 c ds vu61; " "lex12IsSym c = c `elem` '!' : '@' : '#' : '$' : '%' : '&' : '*' : '+' : '.' : '/' : '<' : '=' : '>' : '?' : '\' : '^' : '|' : ':' : '-' : '~' : []; " "lex12LexExp3 s = ([],s) : []; " "lex12Lex6 c s True = []; " "lex12Lex11 c s True = (c : [],s) : []; lex12Lex11 c s False = lex12Lex9 c s (lex12IsSym c); " "lex12Lex2 c vu59 = lex12Lex20 c vu59; " "lex12Lex50 c (ds,s) = concatMap (lex12Lex4 c ds) (lex12LexFracExp s); lex12Lex50 c yu = []; " "lex12IsSingle c = c `elem` ',' : ';' : '(' : ')' : '[' : ']' : '{' : '}' : '_' : '`' : []; " "lex12Lex3 c vu60 = lex12Lex30 c vu60; " "lex12IsIdChar c = isAlphaNum c || c `elem` '_' : ''' : []; " "lex12LexFracExp4 True (wyz : c : cs) = lex12LexFracExp3 wyz c cs (isDigit c); lex12LexFracExp4 wzx wzy = lex12LexFracExp2 wzy; " "lex12LexExp0 e c vu65 = lex12LexExp00 e c vu65; " "lex12LexFracExp3 wyz c cs True = concatMap lex12LexFracExp1 (lexDigits (c : cs)); lex12LexFracExp3 wyz c cs False = lex12LexFracExp2 (wyz : c : cs); " "lex12Lex5 c vu62 = lex12Lex50 c vu62; " "lex12Lex9 c s True = concatMap (lex12Lex2 c) (span lex12IsSym s : []); lex12Lex9 c s False = lex12Lex8 c s (isAlpha c); " "lex12Lex7 c s True = concatMap (lex12Lex5 c) (span isDigit s : []); lex12Lex7 c s False = lex12Lex6 c s otherwise; " "lex12LexFracExp0 ds vu63 = lex12LexFracExp00 ds vu63; " "lex12Lex20 c (sym,t) = (c : sym,t) : []; lex12Lex20 c yv = []; " "lex12Lex40 c ds (fe,t) = (c : ds ++ fe,t) : []; lex12Lex40 c ds xz = []; " "lex12LexFracExp1 vu64 = lex12LexFracExp10 vu64; " "lex12LexExp00 e c (ds,u) = (e : c : ds,u) : []; lex12LexExp00 e c xu = []; " "lex12LexExp (e : s) = lex12LexExp5 (e : s); lex12LexExp s = lex12LexExp3 s; " "lex12LexFracExp10 (ds,t) = concatMap (lex12LexFracExp0 ds) (lex12LexExp t); lex12LexFracExp10 xx = []; " "lex12LexFracExp2 s = lex12LexExp s; " "lex12LexExp5 (e : s) = lex12LexExp4 e s (e `elem` 'e' : 'E' : []); lex12LexExp5 wyx = lex12LexExp3 wyx; " "lex12LexExp100 e c t True = concatMap (lex12LexExp0 e c) (lexDigits t); lex12LexExp100 e c t False = []; " "lex12Lex8 c s True = concatMap (lex12Lex3 c) (span lex12IsIdChar s : []); lex12Lex8 c s False = lex12Lex7 c s (isDigit c); " "lex12LexExp4 e s True = concatMap (lex12LexExp1 e) (s : []) ++ concatMap (lex12LexExp2 e) (lexDigits s); lex12LexExp4 e s False = lex12LexExp3 (e : s); " "lex12LexExp10 e (c : t) = lex12LexExp100 e c t (c `elem` '+' : '-' : []); lex12LexExp10 e xw = []; " "lex12LexExp20 e (ds,t) = (e : ds,t) : []; lex12LexExp20 e xv = []; " "lex12LexExp2 e vu67 = lex12LexExp20 e vu67; " "lex12LexExp1 e vu66 = lex12LexExp10 e vu66; " "lex12Lex30 c (nam,t) = (c : nam,t) : []; lex12Lex30 c yw = []; " "lex12LexFracExp5 (wyz : wzw) = lex12LexFracExp4 (wyz == '.') (wyz : wzw); lex12LexFracExp5 wzz = lex12LexFracExp2 wzz; " "lex12LexFracExp (wyz : wzw) = lex12LexFracExp5 (wyz : wzw); lex12LexFracExp s = lex12LexFracExp2 s; " The bindings of the following Let/Where expression "readParen0 b where { mandatory r = concatMap mandatory2 (lex r); ; mandatory0 x vu48 = mandatory00 x vu48; ; mandatory00 x (xzz : yuu,u) = mandatory002 x (xzz : yuu,u); mandatory00 x vuw = mandatory000 x vuw; ; mandatory000 x vuw = []; ; mandatory001 True x (xzz : [],u) = (x,u) : []; mandatory001 yuv yuw yux = mandatory000 yuw yux; ; mandatory002 x (xzz : yuu,u) = mandatory001 (xzz == ')') x (xzz : yuu,u); mandatory002 yuy yuz = mandatory000 yuy yuz; ; mandatory1 vu49 = mandatory10 vu49; ; mandatory10 (x,t) = concatMap (mandatory0 x) (lex t); mandatory10 vux = []; ; mandatory2 vu50 = mandatory20 vu50; ; mandatory20 (xyy : xyz,s) = mandatory202 (xyy : xyz,s); mandatory20 vuv = mandatory200 vuv; ; mandatory200 vuv = []; ; mandatory201 True (xyy : [],s) = concatMap mandatory1 (optional s); mandatory201 xzu xzv = mandatory200 xzv; ; mandatory202 (xyy : xyz,s) = mandatory201 (xyy == '(') (xyy : xyz,s); mandatory202 xzw = mandatory200 xzw; ; optional r = g r ++ mandatory r; ; readParen0 True = mandatory; readParen0 False = optional; } " are unpacked to the following functions on top level "readParenMandatory200 zvz vuv = []; " "readParenMandatory001 zvz True x (xzz : [],u) = (x,u) : []; readParenMandatory001 zvz yuv yuw yux = readParenMandatory000 zvz yuw yux; " "readParenMandatory zvz r = concatMap (readParenMandatory2 zvz) (lex r); " "readParenMandatory10 zvz (x,t) = concatMap (readParenMandatory0 zvz x) (lex t); readParenMandatory10 zvz vux = []; " "readParenMandatory0 zvz x vu48 = readParenMandatory00 zvz x vu48; " "readParenReadParen0 zvz True = readParenMandatory zvz; readParenReadParen0 zvz False = readParenOptional zvz; " "readParenMandatory000 zvz x vuw = []; " "readParenMandatory002 zvz x (xzz : yuu,u) = readParenMandatory001 zvz (xzz == ')') x (xzz : yuu,u); readParenMandatory002 zvz yuy yuz = readParenMandatory000 zvz yuy yuz; " "readParenMandatory201 zvz True (xyy : [],s) = concatMap (readParenMandatory1 zvz) (readParenOptional zvz s); readParenMandatory201 zvz xzu xzv = readParenMandatory200 zvz xzv; " "readParenMandatory00 zvz x (xzz : yuu,u) = readParenMandatory002 zvz x (xzz : yuu,u); readParenMandatory00 zvz x vuw = readParenMandatory000 zvz x vuw; " "readParenOptional zvz r = zvz r ++ readParenMandatory zvz r; " "readParenMandatory1 zvz vu49 = readParenMandatory10 zvz vu49; " "readParenMandatory202 zvz (xyy : xyz,s) = readParenMandatory201 zvz (xyy == '(') (xyy : xyz,s); readParenMandatory202 zvz xzw = readParenMandatory200 zvz xzw; " "readParenMandatory20 zvz (xyy : xyz,s) = readParenMandatory202 zvz (xyy : xyz,s); readParenMandatory20 zvz vuv = readParenMandatory200 zvz vuv; " "readParenMandatory2 zvz vu50 = readParenMandatory20 zvz vu50; " The bindings of the following Let/Where expression "getChar >>= getLine1 where { getLine0 c ls = return (c : ls); ; getLine1 c = getLine10 c (c == '\10'); ; getLine10 c True = return []; getLine10 c False = getRest >>= getLine0 c; ; getRest = catch getChar getRest0 >>= getRest2; ; getRest0 ex = getRest00 ex (isEOFError ex); ; getRest00 ex True = return '\10'; getRest00 ex False = ioError ex; ; getRest1 c cs = return (c : cs); ; getRest2 c = getRest20 c (c == '\10'); ; getRest20 c True = return []; getRest20 c False = getRest >>= getRest1 c; } " are unpacked to the following functions on top level "getLineGetRest2 c = getLineGetRest20 c (c == '\10'); " "getLineGetLine0 c ls = return (c : ls); " "getLineGetRest0 ex = getLineGetRest00 ex (isEOFError ex); " "getLineGetRest1 c cs = return (c : cs); " "getLineGetLine10 c True = return []; getLineGetLine10 c False = getLineGetRest >>= getLineGetLine0 c; " "getLineGetRest20 c True = return []; getLineGetRest20 c False = getLineGetRest >>= getLineGetRest1 c; " "getLineGetRest00 ex True = return '\10'; getLineGetRest00 ex False = ioError ex; " "getLineGetLine1 c = getLineGetLine10 c (c == '\10'); " "getLineGetRest = catch getChar getLineGetRest0 >>= getLineGetRest2; " ---------------------------------------- (12) Obligation: mainModule Main module Main where { import qualified Prelude; } ---------------------------------------- (13) NumRed (SOUND) Num Reduction:All numbers are transformed to their corresponding representation with Succ, Pred and Zero. ---------------------------------------- (14) Obligation: mainModule Main module Main where { import qualified Prelude; }