mirror of
https://github.com/dhil/phd-dissertation
synced 2026-03-13 11:08:25 +00:00
Note on higher order functions
This commit is contained in:
@@ -382,6 +382,12 @@
|
|||||||
% configurations
|
% configurations
|
||||||
\newcommand{\conf}{\mathcal{C}}
|
\newcommand{\conf}{\mathcal{C}}
|
||||||
|
|
||||||
|
% effect sugar
|
||||||
|
\newcommand{\trcomp}[1]{\sembr{#1}}
|
||||||
|
\newcommand{\trval}[1]{\sembr{#1}}
|
||||||
|
\newcommand{\treff}[1]{\sembr{#1}}
|
||||||
|
\newcommand{\pp}{\Theta}
|
||||||
|
|
||||||
% UNIX example
|
% UNIX example
|
||||||
\newcommand{\UNIX}{UNIX}
|
\newcommand{\UNIX}{UNIX}
|
||||||
\newcommand{\OSname}[0]{Tiny UNIX}
|
\newcommand{\OSname}[0]{Tiny UNIX}
|
||||||
|
|||||||
12
thesis.bib
12
thesis.bib
@@ -3575,3 +3575,15 @@
|
|||||||
pages = {25--63},
|
pages = {25--63},
|
||||||
OPTisbn = {978-94-017-1291-0}
|
OPTisbn = {978-94-017-1291-0}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Sixth order function example
|
||||||
|
@article{Okasaki98,
|
||||||
|
author = {Chris Okasaki},
|
||||||
|
title = {Functional Pearl: Even Higher-Order Functions for Parsing},
|
||||||
|
journal = {J. Funct. Program.},
|
||||||
|
volume = {8},
|
||||||
|
number = {2},
|
||||||
|
pages = {195--199},
|
||||||
|
year = {1998}
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
66
thesis.tex
66
thesis.tex
@@ -610,17 +610,18 @@ efficiency.
|
|||||||
\section{Why first-class control matters}
|
\section{Why first-class control matters}
|
||||||
From the perspective of programmers first-class control is a valuable
|
From the perspective of programmers first-class control is a valuable
|
||||||
programming feature because it enables them to implement their own
|
programming feature because it enables them to implement their own
|
||||||
control idioms as if they were native to the programming
|
control idioms as if they were native to the programming language (in
|
||||||
language. More important, with first-class control programmer-defined
|
fact this is the very definition of first-class control). More
|
||||||
control idioms are local phenomena which can be encapsulated in a
|
important, with first-class control programmer-defined control idioms
|
||||||
library such that the rest of the program does not need to be made
|
are local phenomena which can be encapsulated in a library such that
|
||||||
aware of their existence. Conversely, without first-class control some
|
the rest of the program does not need to be made aware of their
|
||||||
control idioms can only be implemented using global program
|
existence. Conversely, without first-class control some control idioms
|
||||||
restructuring techniques such as continuation passing style.
|
can only be implemented using global program restructuring techniques
|
||||||
|
such as continuation passing style.
|
||||||
|
|
||||||
From the perspective of compiler engineers first-class control is
|
From the perspective of compiler engineers first-class control is
|
||||||
valuable because it unifies several control-related constructs under
|
valuable because it unifies several control-related constructs under
|
||||||
one single construct. First-class control can be beneficial for
|
one single construct. First-class control can even be beneficial for
|
||||||
implementing programming languages which have no notion of first-class
|
implementing programming languages which have no notion of first-class
|
||||||
control in source language. A runtime with support for first-class
|
control in source language. A runtime with support for first-class
|
||||||
control can considerably simplify and ease maintainability of an
|
control can considerably simplify and ease maintainability of an
|
||||||
@@ -839,7 +840,7 @@ return type $R$ with state of type $S$, we transform the function
|
|||||||
signature as follows.
|
signature as follows.
|
||||||
%
|
%
|
||||||
\[
|
\[
|
||||||
\val{A_1 \to \cdots \to A_n \to R}_S
|
\sembr{A_1 \to \cdots \to A_n \to R}_S
|
||||||
\defas A_1 \to \cdots \to A_n \to S \to R \times S
|
\defas A_1 \to \cdots \to A_n \to S \to R \times S
|
||||||
\]
|
\]
|
||||||
%
|
%
|
||||||
@@ -6496,6 +6497,53 @@ getting stuck on an unhandled operation.
|
|||||||
By induction on the typing derivations.
|
By induction on the typing derivations.
|
||||||
\end{proof}
|
\end{proof}
|
||||||
|
|
||||||
|
\subsection{Effect sugar}
|
||||||
|
\label{sec:effect-sugar}
|
||||||
|
|
||||||
|
The class of second-order functions capture many familiar and useful
|
||||||
|
functions (although, it should be noted that there exist useful
|
||||||
|
functions at higher order, e.g. in
|
||||||
|
Chapter~\ref{ch:handlers-efficiency} we shall use third-order
|
||||||
|
functions; for an example of a sixth order function see
|
||||||
|
\citet{Okasaki98}).
|
||||||
|
%
|
||||||
|
\[
|
||||||
|
\bl
|
||||||
|
\pp : \EffectCat \to \EffectCat\\
|
||||||
|
\ba{@{}l@{~}c@{~}l}
|
||||||
|
\pp(\{\cdot\}) &\defas& \{\cdot\}\\
|
||||||
|
\pp(\{\varepsilon\}) &\defas& \{\varepsilon\}\\
|
||||||
|
\pp(\{\ell : A \opto B\} \cup E) &\defas& \{\ell : \theta \} \cup \pp(E),\quad \text{fresh}~\theta
|
||||||
|
\ea\\
|
||||||
|
\el
|
||||||
|
\]
|
||||||
|
%
|
||||||
|
\[
|
||||||
|
\bl
|
||||||
|
\trcomp{-} : \ValTypeCat \times \EffectCat \to \ValTypeCat\\
|
||||||
|
\trcomp{A \to B}_E \defas \trval{A}_{E} \to \trval{B}_{\{\varepsilon\}} \eff E,\quad \text{fresh}~\varepsilon\\
|
||||||
|
\trcomp{A \to B \eff E}_{E'} \defas \trval{A}_{E \cup E'} \to \trval{B}_{\{\varepsilon\}} \eff E \cup E',\quad \text{fresh}~\varepsilon \smallskip\\
|
||||||
|
\trcomp{-} : \HandlerTypeCat \to \HandlerTypeCat\\
|
||||||
|
\trcomp{A \Harrow B} \defas \trcomp{B}_{\{\varepsilon\}} \eff \{\varepsilon\} \Harrow \trcomp{B}_{\{\varepsilon\}} \eff \{\varepsilon\},\quad \text{fresh}~\varepsilon\\
|
||||||
|
\trcomp{A \eff E_A \Harrow B} \defas \trcomp{A}_{E_A} \Harrow \trcomp{B}_{\{\varepsilon\}} \eff \pp(E),\quad \text{fresh}~\varepsilon\\
|
||||||
|
\trcomp{A \Harrow B \eff E_B} \defas \trcomp{A}_{E_B} \Harrow \trcomp{B}_{\{\varepsilon\}} \eff E_B\\
|
||||||
|
\trcomp{A \eff E_A \Harrow B \eff E_B} \defas \trcomp{A}_{E_A \cup E_B} \eff E_A \cup E_B \Harrow \trcomp{B}_{\{\varepsilon\}} \eff \pp(E_A) \cup E_B,\quad \text{fresh}~\varepsilon\\
|
||||||
|
% \trcomp{(A_1 \to B_1 \eff E_1) \to B_2 \eff E_2} \defas (\trval{A_1} \to \trval{B_1} \eff E_1 \cup E_2) \to \trval{B_2} \eff E_1 \cup E_2
|
||||||
|
% \trcomp{A \to B \eff \varepsilon} \defas A \to B \eff \{\varepsilon\}\\
|
||||||
|
% \trcomp{A \to B \eff E} \defas A' \to \trval{B}_{\{\varepsilon\}} \eff E''\\
|
||||||
|
% \quad\where~\bl
|
||||||
|
% (E', A') = \trval{A}_{\treff{E}}\;\keyw{and}\; E'' = \treff{E \cup E'}
|
||||||
|
% \el\\
|
||||||
|
% \val{A \to B \eff E} \defas A' \to B' \eff E'\\
|
||||||
|
% ~\where~\bl
|
||||||
|
% (E_A, A') = \val{A}\\
|
||||||
|
% (E_B,
|
||||||
|
% \ea
|
||||||
|
\map : \Record{\alpha \to \beta;\List~\alpha} \to \List~\beta\\
|
||||||
|
% \map : \Record{\alpha \to \beta \eff \{\varepsilon\};\List~\alpha} \to \List~\beta \eff \{\varepsilon\}
|
||||||
|
\el
|
||||||
|
\]
|
||||||
|
|
||||||
\section{Composing \UNIX{} with effect handlers}
|
\section{Composing \UNIX{} with effect handlers}
|
||||||
\label{sec:deep-handlers-in-action}
|
\label{sec:deep-handlers-in-action}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user