X-Git-Url: https://git.stderr.nl/gitweb?p=matthijs%2Fmaster-project%2Freport.git;a=blobdiff_plain;f=Chapters%2FNormalization.tex;h=b058b63a2a3debae92f4fe435fe1f31799555c40;hp=8de37949200931e5eeae8d337b29e949e03843f9;hb=8638abef4686335ede35793b43f3e25930822544;hpb=75d1001c7a7809c80bc4113477ad90b12f23b80f diff --git a/Chapters/Normalization.tex b/Chapters/Normalization.tex index 8de3794..b058b63 100644 --- a/Chapters/Normalization.tex +++ b/Chapters/Normalization.tex @@ -1441,6 +1441,9 @@ this. \subsection{Case normalisation} + The transformations in this section ensure that case statements end up + in normal form. + \subsubsection{Scrutinee simplification} This transform ensures that the scrutinee of a case expression is always a simple variable reference. @@ -1470,10 +1473,31 @@ \transexample{letflat}{Case normalisation}{from}{to} + \placeintermezzo{}{ + \defref{wild binders} + \startframedtext[width=7cm,background=box,frame=no] + \startalignment[center] + {\tfa Wild binders} + \stopalignment + \blank[medium] + In a functional expression, a \emph{wild binder} refers to any + binder that is never referenced. This means that even though it + will be bound to a particular value, that value is never used. + + The Haskell syntax offers the underscore as a wild binder that + cannot even be referenced (It can be seen as introducing a new, + anonymous, binder everytime it is used). + + In these transformations, the term wild binder will sometimes be + used to indicate that a binder must not be referenced. + \stopframedtext + } + \subsubsection{Case normalization} This transformation ensures that all case expressions get a form that is allowed by the intended normal form. This means they - will become one of: \refdef{intended normal form definition} + will become one of: + \startitemize \item An extractor case with a single alternative that picks a field from a datatype, \eg\ \lam{case x of (a, b) -> a}. @@ -1515,7 +1539,6 @@ Cn wn,0 ... wn,m -> yn \stoptrans - \refdef{wild binder} Note that this transformation applies to case expressions with any scrutinee. If the scrutinee is a complex expression, this might result in duplication of work (hardware). An extra condition to