From: Matthijs Kooijman Date: Wed, 10 Jun 2009 11:13:36 +0000 (+0200) Subject: Add a sequence of examples for the new transformations. X-Git-Tag: final-thesis~331 X-Git-Url: https://git.stderr.nl/gitweb?a=commitdiff_plain;h=7dad1bb3af2b675be75987956f248ceceda60a3e;p=matthijs%2Fmaster-project%2Freport.git Add a sequence of examples for the new transformations. The transformations themselves are not in the document yet, but this was an exploration of the possibilities. --- diff --git a/Core2Core.tex b/Core2Core.tex index 1b1a782..66612e1 100644 --- a/Core2Core.tex +++ b/Core2Core.tex @@ -463,4 +463,249 @@ non-polymorph functions can be a lot faster than generic ones). \item More builtin expressions should be added and these should be evaluated by the compiler. For example, map, fold, +. \stopitemize + +Initial example + +\starttyping + \x -> + let s = foo x + in + case s of + (a, b) -> + case a of + High -> add + Low -> let + op' = case b of + High -> sub + Low -> \c d -> c + in + \c d -> op' d c +\stoptyping + +After top-level η-abstraction: + +\starttyping + \x c d -> + (let s = foo x + in + case s of + (a, b) -> + case a of + High -> add + Low -> let + op' = case b of + High -> sub + Low -> \c d -> c + in + \c d -> op' d c + ) c d +\stoptyping + +After (extended) β-reduction: + +\starttyping + \x c d -> + let s = foo x + in + case s of + (a, b) -> + case a of + High -> add c d + Low -> let + op' = case b of + High -> sub + Low -> \c d -> c + in + op' d c +\stoptyping + +After return value extraction: + +\starttyping + \x c d -> + let s = foo x + r = case s of + (a, b) -> + case a of + High -> add c d + Low -> let + op' = case b of + High -> sub + Low -> \c d -> c + in + op' d c + in + r +\stoptyping + +Scrutinee simplification does not apply. + +After case binder wildening: + +\starttyping + \x c d -> + let s = foo x + a = case s of (a, _) -> a + b = case s of (_, b) -> b + r = case s of + (_, _) -> + case a of + High -> add c d + Low -> let + op' = case b of + High -> sub + Low -> \c d -> c + in + op' d c + in + r +\stoptyping + +After case value simplification + +\starttyping + \x c d -> + let s = foo x + a = case s of (a, _) -> a + b = case s of (_, b) -> b + r = case s of + (_, _) -> r' + rh = add c d + rl = let + rll = \c d -> c + op' = case b of + High -> sub + Low -> rll + in + op' d c + r' = case a of + High -> rh + Low -> rl + in + r +\stoptyping + +After let flattening: + +\starttyping + \x c d -> + let s = foo x + a = case s of (a, _) -> a + b = case s of (_, b) -> b + r = case s of + (_, _) -> r' + rh = add c d + rl = op' d c + rll = \c d -> c + op' = case b of + High -> sub + Low -> rll + r' = case a of + High -> rh + Low -> rl + in + r +\stoptyping + +After function inlining: + +\starttyping + \x c d -> + let s = foo x + a = case s of (a, _) -> a + b = case s of (_, b) -> b + r = case s of + (_, _) -> r' + rh = add c d + rl = (case b of + High -> sub + Low -> \c d -> c) d c + r' = case a of + High -> rh + Low -> rl + in + r +\stoptyping + +After (extended) β-reduction again: + +\starttyping + \x c d -> + let s = foo x + a = case s of (a, _) -> a + b = case s of (_, b) -> b + r = case s of + (_, _) -> r' + rh = add c d + rl = case b of + High -> sub d c + Low -> d + r' = case a of + High -> rh + Low -> rl + in + r +\stoptyping + +After case value simplification again: + +\starttyping + \x c d -> + let s = foo x + a = case s of (a, _) -> a + b = case s of (_, b) -> b + r = case s of + (_, _) -> r' + rh = add c d + rlh = sub d c + rl = case b of + High -> rlh + Low -> d + r' = case a of + High -> rh + Low -> rl + in + r +\stoptyping + +After case removal: + +\starttyping + \x c d -> + let s = foo x + a = case s of (a, _) -> a + b = case s of (_, b) -> b + r = r' + rh = add c d + rlh = sub d c + rl = case b of + High -> rlh + Low -> d + r' = case a of + High -> rh + Low -> rl + in + r +\stoptyping + +After let bind removal: + +\starttyping + \x c d -> + let s = foo x + a = case s of (a, _) -> a + b = case s of (_, b) -> b + rh = add c d + rlh = sub d c + rl = case b of + High -> rlh + Low -> d + r' = case a of + High -> rh + Low -> rl + in + r' +\stoptyping + +Application simplification is not applicable. \stoptext