Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Added discussion of book plan and justification for focus on monadic …

…design patterns.
  • Loading branch information...
commit b69c1df176cf353aa9b0e9205c8484c86e19659e 1 parent 11948ec
Meredith Gregory authored
View
2  src/main/book/content/bibliography/monadic.aux
@@ -1,6 +1,6 @@
\relax
\@setckpt{bibliography/monadic}{
-\setcounter{page}{40}
+\setcounter{page}{42}
\setcounter{equation}{0}
\setcounter{enumi}{0}
\setcounter{enumii}{0}
View
10 src/main/book/content/chapters/eight/ch.aux
@@ -1,12 +1,12 @@
\relax
-\@writefile{toc}{\contentsline {chapter}{\numberline {8}Domain model, storage and state}{35}{chapter.8}}
+\@writefile{toc}{\contentsline {chapter}{\numberline {8}Domain model, storage and state}{37}{chapter.8}}
\@writefile{lof}{\addvspace {10\p@ }}
\@writefile{lot}{\addvspace {10\p@ }}
-\@writefile{toc}{\contentsline {section}{\numberline {8.1}Mapping our domain model to storage}{35}{section.8.1}}
-\@writefile{toc}{\contentsline {section}{\numberline {8.2}Storage and language-integrated query}{35}{section.8.2}}
-\@writefile{toc}{\contentsline {section}{\numberline {8.3}Continuations revisited}{35}{section.8.3}}
+\@writefile{toc}{\contentsline {section}{\numberline {8.1}Mapping our domain model to storage}{37}{section.8.1}}
+\@writefile{toc}{\contentsline {section}{\numberline {8.2}Storage and language-integrated query}{37}{section.8.2}}
+\@writefile{toc}{\contentsline {section}{\numberline {8.3}Continuations revisited}{37}{section.8.3}}
\@setckpt{chapters/eight/ch}{
-\setcounter{page}{36}
+\setcounter{page}{38}
\setcounter{equation}{0}
\setcounter{enumi}{0}
\setcounter{enumii}{0}
View
10 src/main/book/content/chapters/five/ch.aux
@@ -1,12 +1,12 @@
\relax
-\@writefile{toc}{\contentsline {chapter}{\numberline {5}The domain model as abstract syntax}{29}{chapter.5}}
+\@writefile{toc}{\contentsline {chapter}{\numberline {5}The domain model as abstract syntax}{31}{chapter.5}}
\@writefile{lof}{\addvspace {10\p@ }}
\@writefile{lot}{\addvspace {10\p@ }}
-\@writefile{toc}{\contentsline {section}{\numberline {5.1}Our abstract syntax}{29}{section.5.1}}
-\@writefile{toc}{\contentsline {section}{\numberline {5.2}Our application domain model}{29}{section.5.2}}
-\@writefile{toc}{\contentsline {section}{\numberline {5.3}A transform pipeline}{29}{section.5.3}}
+\@writefile{toc}{\contentsline {section}{\numberline {5.1}Our abstract syntax}{31}{section.5.1}}
+\@writefile{toc}{\contentsline {section}{\numberline {5.2}Our application domain model}{31}{section.5.2}}
+\@writefile{toc}{\contentsline {section}{\numberline {5.3}A transform pipeline}{31}{section.5.3}}
\@setckpt{chapters/five/ch}{
-\setcounter{page}{30}
+\setcounter{page}{32}
\setcounter{equation}{0}
\setcounter{enumi}{0}
\setcounter{enumii}{0}
View
10 src/main/book/content/chapters/four/ch.aux
@@ -1,12 +1,12 @@
\relax
-\@writefile{toc}{\contentsline {chapter}{\numberline {4}Parsing requests, monadically}{27}{chapter.4}}
+\@writefile{toc}{\contentsline {chapter}{\numberline {4}Parsing requests, monadically}{29}{chapter.4}}
\@writefile{lof}{\addvspace {10\p@ }}
\@writefile{lot}{\addvspace {10\p@ }}
-\@writefile{toc}{\contentsline {section}{\numberline {4.1}Obligatory parsing monad}{27}{section.4.1}}
-\@writefile{toc}{\contentsline {section}{\numberline {4.2}Your parser combinators are showing}{27}{section.4.2}}
-\@writefile{toc}{\contentsline {section}{\numberline {4.3}EBNF and why higher levels of abstraction are better}{27}{section.4.3}}
+\@writefile{toc}{\contentsline {section}{\numberline {4.1}Obligatory parsing monad}{29}{section.4.1}}
+\@writefile{toc}{\contentsline {section}{\numberline {4.2}Your parser combinators are showing}{29}{section.4.2}}
+\@writefile{toc}{\contentsline {section}{\numberline {4.3}EBNF and why higher levels of abstraction are better}{29}{section.4.3}}
\@setckpt{chapters/four/ch}{
-\setcounter{page}{28}
+\setcounter{page}{30}
\setcounter{equation}{0}
\setcounter{enumi}{0}
\setcounter{enumii}{0}
View
12 src/main/book/content/chapters/nine/ch.aux
@@ -1,13 +1,13 @@
\relax
-\@writefile{toc}{\contentsline {chapter}{\numberline {9}Putting it all together}{37}{chapter.9}}
+\@writefile{toc}{\contentsline {chapter}{\numberline {9}Putting it all together}{39}{chapter.9}}
\@writefile{lof}{\addvspace {10\p@ }}
\@writefile{lot}{\addvspace {10\p@ }}
-\@writefile{toc}{\contentsline {section}{\numberline {9.1}Our web application end-to-end}{37}{section.9.1}}
-\@writefile{toc}{\contentsline {section}{\numberline {9.2}Deploying our application}{37}{section.9.2}}
-\@writefile{toc}{\contentsline {subsection}{\numberline {9.2.1}Why we are not deploying on GAE}{37}{subsection.9.2.1}}
-\@writefile{toc}{\contentsline {section}{\numberline {9.3}From one web application to web framework}{37}{section.9.3}}
+\@writefile{toc}{\contentsline {section}{\numberline {9.1}Our web application end-to-end}{39}{section.9.1}}
+\@writefile{toc}{\contentsline {section}{\numberline {9.2}Deploying our application}{39}{section.9.2}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {9.2.1}Why we are not deploying on GAE}{39}{subsection.9.2.1}}
+\@writefile{toc}{\contentsline {section}{\numberline {9.3}From one web application to web framework}{39}{section.9.3}}
\@setckpt{chapters/nine/ch}{
-\setcounter{page}{38}
+\setcounter{page}{40}
\setcounter{equation}{0}
\setcounter{enumi}{0}
\setcounter{enumii}{0}
View
28 src/main/book/content/chapters/one/ch.aux
@@ -9,21 +9,21 @@
\@writefile{toc}{\contentsline {subsection}{\numberline {1.1.3}Advances in functional programming, monads and the awkward squad}{6}{subsection.1.1.3}}
\@writefile{toc}{\contentsline {section}{\numberline {1.2}Where are we going}{10}{section.1.2}}
\@writefile{toc}{\contentsline {subsection}{\numberline {1.2.1}A functional web}{10}{subsection.1.2.1}}
-\@writefile{toc}{\contentsline {subsection}{\numberline {1.2.2}DSL-based design}{10}{subsection.1.2.2}}
-\@writefile{toc}{\contentsline {section}{\numberline {1.3}How are we going to get there}{11}{section.1.3}}
-\@writefile{toc}{\contentsline {subsection}{\numberline {1.3.1}Leading by example}{11}{subsection.1.3.1}}
-\@writefile{toc}{\contentsline {subsubsection}{Our toy language}{12}{section*.7}}
-\@writefile{toc}{\contentsline {paragraph}{Abstract syntax}{12}{section*.8}}
-\@writefile{toc}{\contentsline {paragraph}{A simple-minded representation}{12}{section*.9}}
-\@writefile{toc}{\contentsline {paragraph}{Type parametrization and quotation}{13}{section*.10}}
-\@writefile{toc}{\contentsline {paragraph}{Some syntactic sugar}{14}{section*.11}}
-\@writefile{toc}{\contentsline {paragraph}{Digression: complexity management principle}{14}{section*.12}}
-\@writefile{toc}{\contentsline {paragraph}{Concrete syntax}{14}{section*.13}}
-\@writefile{toc}{\contentsline {paragraph}{Translating concrete syntax to abstract syntax}{15}{section*.14}}
-\@writefile{toc}{\contentsline {paragraph}{Structural equivalence and Relations or What makes abstract syntax abstract}{15}{section*.15}}
-\@writefile{toc}{\contentsline {paragraph}{Evaluation -- aka operational semantics}{16}{section*.16}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {1.2.2}DSL-based design}{12}{subsection.1.2.2}}
+\@writefile{toc}{\contentsline {section}{\numberline {1.3}How are we going to get there}{13}{section.1.3}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {1.3.1}Leading by example}{13}{subsection.1.3.1}}
+\@writefile{toc}{\contentsline {subsubsection}{Our toy language}{13}{section*.7}}
+\@writefile{toc}{\contentsline {paragraph}{Abstract syntax}{13}{section*.8}}
+\@writefile{toc}{\contentsline {paragraph}{A simple-minded representation}{14}{section*.9}}
+\@writefile{toc}{\contentsline {paragraph}{Type parametrization and quotation}{14}{section*.10}}
+\@writefile{toc}{\contentsline {paragraph}{Some syntactic sugar}{15}{section*.11}}
+\@writefile{toc}{\contentsline {paragraph}{Digression: complexity management principle}{16}{section*.12}}
+\@writefile{toc}{\contentsline {paragraph}{Concrete syntax}{16}{section*.13}}
+\@writefile{toc}{\contentsline {paragraph}{Translating concrete syntax to abstract syntax}{17}{section*.14}}
+\@writefile{toc}{\contentsline {paragraph}{Structural equivalence and Relations or What makes abstract syntax abstract}{17}{section*.15}}
+\@writefile{toc}{\contentsline {paragraph}{Evaluation -- aka operational semantics}{18}{section*.16}}
\@setckpt{chapters/one/ch}{
-\setcounter{page}{19}
+\setcounter{page}{21}
\setcounter{equation}{0}
\setcounter{enumi}{0}
\setcounter{enumii}{0}
View
87 src/main/book/content/chapters/one/where-are-we-going.tex
@@ -2,13 +2,92 @@ \section{Where are we going}
With a preamble like that it doesn't take much to guess where all this
is heading. More and more we are looking at trends that lead toward
-more functional and functionally-based web applications. The growing
-popularity of frameworks like \texttt{Lift} is really the tip of the
-iceberg.
+more functional and functionally-based web applications. We need not
+look to the growing popularity of cutting-edge frameworks like
+\texttt{Lift} to see this trend. Both Javascript (with it's origins in
+Self) and Rails must be counted amongst the functionally influenced.
\subsection{A functional web}
-TBD
+Because there are already plenty of excellent functional web
+frameworks in the open source community our aim is not to build
+another. Rather our aim is to supply a set of design patterns that
+will work with most -- in fact are already implicitly at work in many
+-- but that when used correctly will reduce complexity.
+
+Specifically, we will look at the organization of the pipeline of a
+web-application from the pipeline of HTTP requests through the
+application logic to the store and back. We will see how in each case
+judicious use of the monadic design pattern provides for significant
+leverage in structuring code, making it both simpler, more
+maintainable and more robust in the face of change.
+
+To that end we will be looking at
+
+\begin{itemize}
+ \item processing HTTP-streams using presence of \emph{delimited}
+ continuations to allow for a sophisticated state management
+ \item parser combinators for parsing HTTP-requests and higher-level
+ application protocols using HTTP as a transport
+ \item application domain model as an abstract syntax
+ \item zippers as a means of automatically generating navigation
+ \item collections and containers in memory
+ \item storage, including a new way to approach query and search
+\end{itemize}
+
+In each case there is an underlying organization to the computation
+that solves the problem. In each case we find an instance of the
+monadic design pattern. Whether this apparent universal applicability
+is an instance of finding a hammer that turns everything it encounters
+into nails or that structuring computation in terms of monads has a
+genuine depth remains to be seen. What can be said even at this early
+stage of the game is that object-oriented design patterns were
+certainly proposed for each of these situations and many others. It
+was commonly held that such techniques were not merely universally
+applicable, but of genuine utility in every domain of application. The
+failure of object-oriented design methods to make good on these claims
+might be an argument for caution. Sober assessment of the situation,
+however, gives cause for hope.
+
+Unlike the notion monad, objects began as ``folk'' tradition. It was
+many years into proposals for object-oriented design methods before
+there were commonly accepted formal or mathematical accounts. By
+contrast monads began as a mathematical entity. Sequestered away in
+category theory the idea was one of a whole zoology of generalizations
+of common mathematical entities. It took some time to understand that
+both set comprehensions and algebraic data types were instances monads
+and that the former was a universal language for the notion. It took
+even more time to see the application to structuring
+computations. Progress was slow and steady and built from a solid
+foundation. This gave the notion an unprecedented level of quality
+assurance testing. The category theoretic definition is nearly fifty
+years old. If we include the investigation of set comprehensions as a
+part of the QA process we add another one hundred years. If we include
+the forty years of vigorous use of relational databases and the
+\lstinline[language=SQL]!SELECT-FROM-WHERE! construct in the industry,
+we see that this was hardly just an academic exercise.
+
+Perhaps more importantly than any of those is the fact that while
+object-oriented techniques ultimately failed to be compositional in
+any useful way -- inheritance, in fact being at positively at odds
+with concurrent composition -- the notion of monad is actually an
+attempt to capture the meaning of composition. As we will see in the
+upcoming sections, it defines an powerful notion of parametric
+composition. This is crucial because in the real world
+\emph{composition is the primary means to scaling} -- both in the
+sense of performance and in the sense of complexity. As pragmatic
+engineers we manage complexity of scale by building larger systems out
+of smaller ones. As pragmatic engineers we understand that each time
+components are required to interface or synchronize we have the
+potential for introducing performance concerns. The parametric form of
+composition encapsulated in the notion of monad gives us a language
+for talking about both kinds of scaling and connecting the two
+ideas. It provides a language for talking about the interplay between
+the composition of structure and the composition of the flow of
+control. It encapsulates stateful computation. It encapsulates data
+structure. In this sense the notion of monad is poised to be the
+rational reconstruction of the notion of object. Telling this story
+was my motivation for writing this book.
\subsection{DSL-based design}
View
8 src/main/book/content/chapters/seven/ch.aux
@@ -1,11 +1,11 @@
\relax
-\@writefile{toc}{\contentsline {chapter}{\numberline {7}A review of collections as monads}{33}{chapter.7}}
+\@writefile{toc}{\contentsline {chapter}{\numberline {7}A review of collections as monads}{35}{chapter.7}}
\@writefile{lof}{\addvspace {10\p@ }}
\@writefile{lot}{\addvspace {10\p@ }}
-\@writefile{toc}{\contentsline {section}{\numberline {7.1}Monad as container}{33}{section.7.1}}
-\@writefile{toc}{\contentsline {section}{\numberline {7.2}Monads and take-out}{33}{section.7.2}}
+\@writefile{toc}{\contentsline {section}{\numberline {7.1}Monad as container}{35}{section.7.1}}
+\@writefile{toc}{\contentsline {section}{\numberline {7.2}Monads and take-out}{35}{section.7.2}}
\@setckpt{chapters/seven/ch}{
-\setcounter{page}{34}
+\setcounter{page}{36}
\setcounter{equation}{0}
\setcounter{enumi}{0}
\setcounter{enumii}{0}
View
10 src/main/book/content/chapters/six/ch.aux
@@ -1,12 +1,12 @@
\relax
-\@writefile{toc}{\contentsline {chapter}{\numberline {6}Zippers and contexts and URI's, oh my!}{31}{chapter.6}}
+\@writefile{toc}{\contentsline {chapter}{\numberline {6}Zippers and contexts and URI's, oh my!}{33}{chapter.6}}
\@writefile{lof}{\addvspace {10\p@ }}
\@writefile{lot}{\addvspace {10\p@ }}
-\@writefile{toc}{\contentsline {section}{\numberline {6.1}Zippers are not just for Bruno anymore}{31}{section.6.1}}
-\@writefile{toc}{\contentsline {section}{\numberline {6.2}Constructing contexts and zippers from data types}{31}{section.6.2}}
-\@writefile{toc}{\contentsline {section}{\numberline {6.3}Mapping URIs to zipper-based paths and back}{31}{section.6.3}}
+\@writefile{toc}{\contentsline {section}{\numberline {6.1}Zippers are not just for Bruno anymore}{33}{section.6.1}}
+\@writefile{toc}{\contentsline {section}{\numberline {6.2}Constructing contexts and zippers from data types}{33}{section.6.2}}
+\@writefile{toc}{\contentsline {section}{\numberline {6.3}Mapping URIs to zipper-based paths and back}{33}{section.6.3}}
\@setckpt{chapters/six/ch}{
-\setcounter{page}{32}
+\setcounter{page}{34}
\setcounter{equation}{0}
\setcounter{enumi}{0}
\setcounter{enumii}{0}
View
8 src/main/book/content/chapters/ten/ch.aux
@@ -1,11 +1,11 @@
\relax
-\@writefile{toc}{\contentsline {chapter}{\numberline {10}The semantic web}{39}{chapter.10}}
+\@writefile{toc}{\contentsline {chapter}{\numberline {10}The semantic web}{41}{chapter.10}}
\@writefile{lof}{\addvspace {10\p@ }}
\@writefile{lot}{\addvspace {10\p@ }}
-\@writefile{toc}{\contentsline {section}{\numberline {10.1}How our web framework enables different kinds of application queries}{39}{section.10.1}}
-\@writefile{toc}{\contentsline {section}{\numberline {10.2}Searching for programs}{39}{section.10.2}}
+\@writefile{toc}{\contentsline {section}{\numberline {10.1}How our web framework enables different kinds of application queries}{41}{section.10.1}}
+\@writefile{toc}{\contentsline {section}{\numberline {10.2}Searching for programs}{41}{section.10.2}}
\@setckpt{chapters/ten/ch}{
-\setcounter{page}{40}
+\setcounter{page}{42}
\setcounter{equation}{0}
\setcounter{enumi}{0}
\setcounter{enumii}{0}
View
14 src/main/book/content/chapters/three/ch.aux
@@ -1,14 +1,14 @@
\relax
-\@writefile{toc}{\contentsline {chapter}{\numberline {3}An IO-monad for http streams}{25}{chapter.3}}
+\@writefile{toc}{\contentsline {chapter}{\numberline {3}An IO-monad for http streams}{27}{chapter.3}}
\@writefile{lof}{\addvspace {10\p@ }}
\@writefile{lot}{\addvspace {10\p@ }}
-\@writefile{toc}{\contentsline {section}{\numberline {3.1}Code first, questions later}{25}{section.3.1}}
-\@writefile{toc}{\contentsline {subsection}{\numberline {3.1.1}An HTTP-request processor}{25}{subsection.3.1.1}}
-\@writefile{toc}{\contentsline {subsection}{\numberline {3.1.2}What we did}{25}{subsection.3.1.2}}
-\@writefile{toc}{\contentsline {section}{\numberline {3.2}Synchrony, asynchrony and buffering}{25}{section.3.2}}
-\@writefile{toc}{\contentsline {section}{\numberline {3.3}State, statelessness and continuations}{25}{section.3.3}}
+\@writefile{toc}{\contentsline {section}{\numberline {3.1}Code first, questions later}{27}{section.3.1}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {3.1.1}An HTTP-request processor}{27}{subsection.3.1.1}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {3.1.2}What we did}{27}{subsection.3.1.2}}
+\@writefile{toc}{\contentsline {section}{\numberline {3.2}Synchrony, asynchrony and buffering}{27}{section.3.2}}
+\@writefile{toc}{\contentsline {section}{\numberline {3.3}State, statelessness and continuations}{27}{section.3.3}}
\@setckpt{chapters/three/ch}{
-\setcounter{page}{26}
+\setcounter{page}{28}
\setcounter{equation}{0}
\setcounter{enumi}{0}
\setcounter{enumii}{0}
View
30 src/main/book/content/chapters/two/ch.aux
@@ -1,22 +1,22 @@
\relax
-\@writefile{toc}{\contentsline {chapter}{\numberline {2}Toolbox}{19}{chapter.2}}
+\@writefile{toc}{\contentsline {chapter}{\numberline {2}Toolbox}{21}{chapter.2}}
\@writefile{lof}{\addvspace {10\p@ }}
\@writefile{lot}{\addvspace {10\p@ }}
-\@writefile{toc}{\contentsline {section}{\numberline {2.1}Introduction to notation and terminology}{19}{section.2.1}}
-\@writefile{toc}{\contentsline {section}{\numberline {2.2}Introduction to core design patterns}{19}{section.2.2}}
-\@writefile{toc}{\contentsline {section}{\numberline {2.3}Variations in presentation}{19}{section.2.3}}
-\@writefile{toc}{\contentsline {subsection}{\numberline {2.3.1}A little history}{19}{subsection.2.3.1}}
-\@writefile{lol}{\contentsline {lstlisting}{\numberline {2.1}monad typeclass}{20}{lstlisting.2.1}}
-\@writefile{toc}{\contentsline {subsection}{\numberline {2.3.2}A little more history}{20}{subsection.2.3.2}}
-\@writefile{toc}{\contentsline {subsubsection}{Intuition: Monad as container}{21}{section*.17}}
-\@writefile{toc}{\contentsline {paragraph}{Shape of the container}{21}{section*.18}}
-\@writefile{toc}{\contentsline {paragraph}{Putting things into the container}{21}{section*.19}}
-\@writefile{toc}{\contentsline {paragraph}{Flattening nested containers}{21}{section*.20}}
-\@writefile{toc}{\contentsline {subsubsection}{Preserving connection to existing structure: Monad as generalization of monoid}{21}{section*.21}}
-\@writefile{toc}{\contentsline {subsubsection}{Decomposition of monad requirements}{22}{section*.22}}
-\@writefile{toc}{\contentsline {subsubsection}{A categorical way to look at monads}{22}{section*.23}}
+\@writefile{toc}{\contentsline {section}{\numberline {2.1}Introduction to notation and terminology}{21}{section.2.1}}
+\@writefile{toc}{\contentsline {section}{\numberline {2.2}Introduction to core design patterns}{21}{section.2.2}}
+\@writefile{toc}{\contentsline {section}{\numberline {2.3}Variations in presentation}{21}{section.2.3}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {2.3.1}A little history}{21}{subsection.2.3.1}}
+\@writefile{lol}{\contentsline {lstlisting}{\numberline {2.1}monad typeclass}{22}{lstlisting.2.1}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {2.3.2}A little more history}{22}{subsection.2.3.2}}
+\@writefile{toc}{\contentsline {subsubsection}{Intuition: Monad as container}{23}{section*.17}}
+\@writefile{toc}{\contentsline {paragraph}{Shape of the container}{23}{section*.18}}
+\@writefile{toc}{\contentsline {paragraph}{Putting things into the container}{23}{section*.19}}
+\@writefile{toc}{\contentsline {paragraph}{Flattening nested containers}{23}{section*.20}}
+\@writefile{toc}{\contentsline {subsubsection}{Preserving connection to existing structure: Monad as generalization of monoid}{23}{section*.21}}
+\@writefile{toc}{\contentsline {subsubsection}{Decomposition of monad requirements}{24}{section*.22}}
+\@writefile{toc}{\contentsline {subsubsection}{A categorical way to look at monads}{24}{section*.23}}
\@setckpt{chapters/two/ch}{
-\setcounter{page}{24}
+\setcounter{page}{26}
\setcounter{equation}{0}
\setcounter{enumi}{0}
\setcounter{enumii}{0}
View
76 src/main/book/content/monadic.log
@@ -1,4 +1,4 @@
-This is pdfeTeX, Version 3.141592-1.21a-2.2 (Web2C 7.5.4) (format=pdflatex 2008.11.17) 22 FEB 2010 04:17
+This is pdfeTeX, Version 3.141592-1.21a-2.2 (Web2C 7.5.4) (format=pdflatex 2008.11.17) 23 FEB 2010 03:09
entering extended mode
**monadic.tex
(./monadic.tex
@@ -366,7 +366,7 @@ Underfull \vbox (badness 2689) has occurred while \output is active []
s been already used, duplicate ignored
<to be read again>
\penalty
-l.37 ... IO-monad for http streams}{25}{chapter.3}
+l.37 ... IO-monad for http streams}{27}{chapter.3}
[1
] [2])
@@ -457,13 +457,20 @@ l.263
[8]
LaTeX Font Info: Font shape `OMS/cmr/m/n' in size <12> not available
(Font) Font shape `OMS/cmsy/m/n' tried instead on input line 267.
-) (./chapters/one/where-are-we-going.tex [9] [10])
-(./chapters/one/how-are-we-going-to-get-there.tex [11] [12]
+) (./chapters/one/where-are-we-going.tex [9] [10]
+Underfull \vbox (badness 10000) has occurred while \output is active []
+
+ [11])
+(./chapters/one/how-are-we-going-to-get-there.tex
+Underfull \vbox (badness 5771) has occurred while \output is active []
+
+ [12]
+[13] [14]
Overfull \hbox (3.25792pt too wide) in paragraph at lines 110--111
[][][][][][][][][][][][][][][][][][][][][][][][][]
[]
-[13]
+[15]
LaTeX Font Info: Try loading font information for OMS+cmtt on input line 174
.
LaTeX Font Info: No file OMScmtt.fd. on input line 174.
@@ -473,7 +480,7 @@ LaTeX Font Warning: Font shape `OMS/cmtt/m/n' undefined
(Font) using `OMS/cmsy/m/n' instead
(Font) for symbol `textbraceleft' on input line 174.
-[14]
+[16]
LaTeX Font Info: Try loading font information for OML+cmr on input line 227.
(/opt/local/share/texmf-dist/tex/latex/base/omlcmr.fd
@@ -481,7 +488,10 @@ File: omlcmr.fd 1999/05/25 v2.5h Standard LaTeX font definitions
)
LaTeX Font Info: Font shape `OML/cmr/bx/n' in size <12> not available
(Font) Font shape `OML/cmm/b/it' tried instead on input line 227.
- [15]
+
+Underfull \vbox (badness 10000) has occurred while \output is active []
+
+ [17]
Overfull \hbox (3.25792pt too wide) in paragraph at lines 252--253
[][][][][][][][][][][][][][][][][][][][][][][][][][][]
[]
@@ -491,7 +501,7 @@ Overfull \hbox (123.10771pt too wide) in paragraph at lines 293--294
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]
[]
-[16]
+[18]
Overfull \hbox (10.3079pt too wide) in paragraph at lines 302--303
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]
[]
@@ -524,15 +534,15 @@ Overfull \hbox (94.90776pt too wide) in paragraph at lines 339--340
Underfull \vbox (badness 10000) has occurred while \output is active []
- [17])
-[18])
+ [19])
+[20])
\openout2 = `chapters/two/ch.aux'.
(./chapters/two/ch.tex
Chapter 2.
(./chapters/two/toolbox.tex) (./chapters/two/notation-and-terminology.tex)
(./chapters/two/core-design-patterns.tex)
-(./chapters/two/variation-in-presentation.tex [19
+(./chapters/two/variation-in-presentation.tex [21
@@ -541,11 +551,11 @@ LaTeX Font Info: Font shape `OML/cmr/m/n' in size <12> not available
(Font) Font shape `OML/cmm/m/it' tried instead on input line 25.
Package hyperref Info: bookmark level for unknown lstlisting defaults to 0 on i
nput line 35.
- [20] [21] [22]) [23])
+ [22] [23] [24]) [25])
\openout2 = `chapters/three/ch.aux'.
-(./chapters/three/ch.tex [24
+(./chapters/three/ch.tex [26
@@ -554,22 +564,22 @@ Chapter 3.
(./chapters/three/io-monad-for-http-streams.tex)
(./chapters/three/code-first.tex)
(./chapters/three/synchrony-asynchrony-buffering.tex)
-(./chapters/three/state-statelessness-continuations.tex) [25])
+(./chapters/three/state-statelessness-continuations.tex) [27])
\openout2 = `chapters/four/ch.aux'.
-(./chapters/four/ch.tex [26
+(./chapters/four/ch.tex [28
]
Chapter 4.
(./chapters/four/parsing.tex) (./chapters/four/obligatory-parsing-monad.tex)
-(./chapters/four/parser-combinators.tex) (./chapters/four/EBNF.tex) [27])
+(./chapters/four/parser-combinators.tex) (./chapters/four/EBNF.tex) [29])
\openout2 = `chapters/five/ch.aux'.
-(./chapters/five/ch.tex [28
+(./chapters/five/ch.tex [30
@@ -577,10 +587,10 @@ Chapter 4.
Chapter 5.
(./chapters/five/domain-model.tex) (./chapters/five/abstract-syntax.tex)
(./chapters/five/application-domain-model.tex)
-(./chapters/five/transform-pipeline.tex) [29])
+(./chapters/five/transform-pipeline.tex) [31])
\openout2 = `chapters/six/ch.aux'.
- (./chapters/six/ch.tex [30
+ (./chapters/six/ch.tex [32
@@ -593,21 +603,21 @@ Overfull \hbox (3.44252pt too wide) in paragraph at lines 1--1
[]\OT1/cmr/bx/n/17.28 Mapping URIs to zipper-based paths and back
[]
-) [31])
+) [33])
\openout2 = `chapters/seven/ch.aux'.
- (./chapters/seven/ch.tex [32
+ (./chapters/seven/ch.tex [34
]
Chapter 7.
(./chapters/seven/collections-as-monads.tex) (./chapters/seven/container.tex)
-(./chapters/seven/monad-and-comonad.tex) [33])
+(./chapters/seven/monad-and-comonad.tex) [35])
\openout2 = `chapters/eight/ch.aux'.
(./chapters/eight/ch.tex
-[34
+[36
@@ -615,11 +625,11 @@ Chapter 7.
Chapter 8.
(./chapters/eight/domain-state-storage.tex)
(./chapters/eight/model-to-store.tex) (./chapters/eight/storage-LINQ.tex)
-(./chapters/eight/continuations-revisited.tex) [35])
+(./chapters/eight/continuations-revisited.tex) [37])
\openout2 = `chapters/nine/ch.aux'.
(./chapters/nine/ch.tex
-[36
+[38
@@ -627,17 +637,17 @@ Chapter 8.
Chapter 9.
(./chapters/nine/putting-it-all-together.tex) (./chapters/nine/end-to-end.tex)
(./chapters/nine/deployment.tex) (./chapters/nine/application-to-framework.tex)
-[37])
+[39])
\openout2 = `chapters/ten/ch.aux'.
- (./chapters/ten/ch.tex [38
+ (./chapters/ten/ch.tex [40
]
Chapter 10.
(./chapters/ten/semantic-web.tex) (./chapters/ten/new-queries.tex)
-(./chapters/ten/search-for-behavior.tex) [39])
+(./chapters/ten/search-for-behavior.tex) [41])
\openout2 = `bibliography/monadic.aux'.
@@ -651,16 +661,16 @@ LaTeX Font Warning: Some font shapes were not available, defaults substituted.
)
Here is how much of TeX's memory you used:
- 6390 strings out of 94500
- 86692 string characters out of 1174972
+ 6392 strings out of 94500
+ 86706 string characters out of 1174972
184090 words of memory out of 1000000
9038 multiletter control sequences out of 10000+50000
17287 words of font info for 66 fonts, out of 500000 for 2000
580 hyphenation exceptions out of 1000
31i,16n,43p,282b,1551s stack positions out of 1500i,500n,5000p,200000b,5000s
PDF statistics:
- 647 PDF objects out of 300000
- 235 named destinations out of 131072
+ 656 PDF objects out of 300000
+ 237 named destinations out of 131072
425 words of extra memory for PDF output out of 65536
</opt/local/share/texmf-dist/fonts/type1/bluesky/cm/cmmib10.pfb></opt/local/s
hare/texmf-dist/fonts/type1/bluesky/cm/cmmi8.pfb></opt/local/share/texmf-dist/f
@@ -675,4 +685,4 @@ exmf-dist/fonts/type1/bluesky/cm/cmti10.pfb></opt/local/share/texmf-dist/fonts/
type1/bluesky/cm/cmsy10.pfb></opt/local/share/texmf-dist/fonts/type1/bluesky/cm
/cmr10.pfb></opt/local/share/texmf-dist/fonts/type1/bluesky/cm/cmr12.pfb></opt/
local/share/texmf-dist/fonts/type1/bluesky/cm/cmr17.pfb>
-Output written on monadic.pdf (48 pages, 251250 bytes).
+Output written on monadic.pdf (50 pages, 257738 bytes).
View
BIN  src/main/book/content/monadic.pdf
Binary file not shown
View
118 src/main/book/content/monadic.toc
@@ -8,62 +8,62 @@
\contentsline {subsection}{\numberline {1.1.3}Advances in functional programming, monads and the awkward squad}{6}{subsection.1.1.3}
\contentsline {section}{\numberline {1.2}Where are we going}{10}{section.1.2}
\contentsline {subsection}{\numberline {1.2.1}A functional web}{10}{subsection.1.2.1}
-\contentsline {subsection}{\numberline {1.2.2}DSL-based design}{10}{subsection.1.2.2}
-\contentsline {section}{\numberline {1.3}How are we going to get there}{11}{section.1.3}
-\contentsline {subsection}{\numberline {1.3.1}Leading by example}{11}{subsection.1.3.1}
-\contentsline {subsubsection}{Our toy language}{12}{section*.7}
-\contentsline {paragraph}{Abstract syntax}{12}{section*.8}
-\contentsline {paragraph}{A simple-minded representation}{12}{section*.9}
-\contentsline {paragraph}{Type parametrization and quotation}{13}{section*.10}
-\contentsline {paragraph}{Some syntactic sugar}{14}{section*.11}
-\contentsline {paragraph}{Digression: complexity management principle}{14}{section*.12}
-\contentsline {paragraph}{Concrete syntax}{14}{section*.13}
-\contentsline {paragraph}{Translating concrete syntax to abstract syntax}{15}{section*.14}
-\contentsline {paragraph}{Structural equivalence and Relations or What makes abstract syntax abstract}{15}{section*.15}
-\contentsline {paragraph}{Evaluation -- aka operational semantics}{16}{section*.16}
-\contentsline {chapter}{\numberline {2}Toolbox}{19}{chapter.2}
-\contentsline {section}{\numberline {2.1}Introduction to notation and terminology}{19}{section.2.1}
-\contentsline {section}{\numberline {2.2}Introduction to core design patterns}{19}{section.2.2}
-\contentsline {section}{\numberline {2.3}Variations in presentation}{19}{section.2.3}
-\contentsline {subsection}{\numberline {2.3.1}A little history}{19}{subsection.2.3.1}
-\contentsline {subsection}{\numberline {2.3.2}A little more history}{20}{subsection.2.3.2}
-\contentsline {subsubsection}{Intuition: Monad as container}{21}{section*.17}
-\contentsline {paragraph}{Shape of the container}{21}{section*.18}
-\contentsline {paragraph}{Putting things into the container}{21}{section*.19}
-\contentsline {paragraph}{Flattening nested containers}{21}{section*.20}
-\contentsline {subsubsection}{Preserving connection to existing structure: Monad as generalization of monoid}{21}{section*.21}
-\contentsline {subsubsection}{Decomposition of monad requirements}{22}{section*.22}
-\contentsline {subsubsection}{A categorical way to look at monads}{22}{section*.23}
-\contentsline {chapter}{\numberline {3}An IO-monad for http streams}{25}{chapter.3}
-\contentsline {section}{\numberline {3.1}Code first, questions later}{25}{section.3.1}
-\contentsline {subsection}{\numberline {3.1.1}An HTTP-request processor}{25}{subsection.3.1.1}
-\contentsline {subsection}{\numberline {3.1.2}What we did}{25}{subsection.3.1.2}
-\contentsline {section}{\numberline {3.2}Synchrony, asynchrony and buffering}{25}{section.3.2}
-\contentsline {section}{\numberline {3.3}State, statelessness and continuations}{25}{section.3.3}
-\contentsline {chapter}{\numberline {4}Parsing requests, monadically}{27}{chapter.4}
-\contentsline {section}{\numberline {4.1}Obligatory parsing monad}{27}{section.4.1}
-\contentsline {section}{\numberline {4.2}Your parser combinators are showing}{27}{section.4.2}
-\contentsline {section}{\numberline {4.3}EBNF and why higher levels of abstraction are better}{27}{section.4.3}
-\contentsline {chapter}{\numberline {5}The domain model as abstract syntax}{29}{chapter.5}
-\contentsline {section}{\numberline {5.1}Our abstract syntax}{29}{section.5.1}
-\contentsline {section}{\numberline {5.2}Our application domain model}{29}{section.5.2}
-\contentsline {section}{\numberline {5.3}A transform pipeline}{29}{section.5.3}
-\contentsline {chapter}{\numberline {6}Zippers and contexts and URI's, oh my!}{31}{chapter.6}
-\contentsline {section}{\numberline {6.1}Zippers are not just for Bruno anymore}{31}{section.6.1}
-\contentsline {section}{\numberline {6.2}Constructing contexts and zippers from data types}{31}{section.6.2}
-\contentsline {section}{\numberline {6.3}Mapping URIs to zipper-based paths and back}{31}{section.6.3}
-\contentsline {chapter}{\numberline {7}A review of collections as monads}{33}{chapter.7}
-\contentsline {section}{\numberline {7.1}Monad as container}{33}{section.7.1}
-\contentsline {section}{\numberline {7.2}Monads and take-out}{33}{section.7.2}
-\contentsline {chapter}{\numberline {8}Domain model, storage and state}{35}{chapter.8}
-\contentsline {section}{\numberline {8.1}Mapping our domain model to storage}{35}{section.8.1}
-\contentsline {section}{\numberline {8.2}Storage and language-integrated query}{35}{section.8.2}
-\contentsline {section}{\numberline {8.3}Continuations revisited}{35}{section.8.3}
-\contentsline {chapter}{\numberline {9}Putting it all together}{37}{chapter.9}
-\contentsline {section}{\numberline {9.1}Our web application end-to-end}{37}{section.9.1}
-\contentsline {section}{\numberline {9.2}Deploying our application}{37}{section.9.2}
-\contentsline {subsection}{\numberline {9.2.1}Why we are not deploying on GAE}{37}{subsection.9.2.1}
-\contentsline {section}{\numberline {9.3}From one web application to web framework}{37}{section.9.3}
-\contentsline {chapter}{\numberline {10}The semantic web}{39}{chapter.10}
-\contentsline {section}{\numberline {10.1}How our web framework enables different kinds of application queries}{39}{section.10.1}
-\contentsline {section}{\numberline {10.2}Searching for programs}{39}{section.10.2}
+\contentsline {subsection}{\numberline {1.2.2}DSL-based design}{12}{subsection.1.2.2}
+\contentsline {section}{\numberline {1.3}How are we going to get there}{13}{section.1.3}
+\contentsline {subsection}{\numberline {1.3.1}Leading by example}{13}{subsection.1.3.1}
+\contentsline {subsubsection}{Our toy language}{13}{section*.7}
+\contentsline {paragraph}{Abstract syntax}{13}{section*.8}
+\contentsline {paragraph}{A simple-minded representation}{14}{section*.9}
+\contentsline {paragraph}{Type parametrization and quotation}{14}{section*.10}
+\contentsline {paragraph}{Some syntactic sugar}{15}{section*.11}
+\contentsline {paragraph}{Digression: complexity management principle}{16}{section*.12}
+\contentsline {paragraph}{Concrete syntax}{16}{section*.13}
+\contentsline {paragraph}{Translating concrete syntax to abstract syntax}{17}{section*.14}
+\contentsline {paragraph}{Structural equivalence and Relations or What makes abstract syntax abstract}{17}{section*.15}
+\contentsline {paragraph}{Evaluation -- aka operational semantics}{18}{section*.16}
+\contentsline {chapter}{\numberline {2}Toolbox}{21}{chapter.2}
+\contentsline {section}{\numberline {2.1}Introduction to notation and terminology}{21}{section.2.1}
+\contentsline {section}{\numberline {2.2}Introduction to core design patterns}{21}{section.2.2}
+\contentsline {section}{\numberline {2.3}Variations in presentation}{21}{section.2.3}
+\contentsline {subsection}{\numberline {2.3.1}A little history}{21}{subsection.2.3.1}
+\contentsline {subsection}{\numberline {2.3.2}A little more history}{22}{subsection.2.3.2}
+\contentsline {subsubsection}{Intuition: Monad as container}{23}{section*.17}
+\contentsline {paragraph}{Shape of the container}{23}{section*.18}
+\contentsline {paragraph}{Putting things into the container}{23}{section*.19}
+\contentsline {paragraph}{Flattening nested containers}{23}{section*.20}
+\contentsline {subsubsection}{Preserving connection to existing structure: Monad as generalization of monoid}{23}{section*.21}
+\contentsline {subsubsection}{Decomposition of monad requirements}{24}{section*.22}
+\contentsline {subsubsection}{A categorical way to look at monads}{24}{section*.23}
+\contentsline {chapter}{\numberline {3}An IO-monad for http streams}{27}{chapter.3}
+\contentsline {section}{\numberline {3.1}Code first, questions later}{27}{section.3.1}
+\contentsline {subsection}{\numberline {3.1.1}An HTTP-request processor}{27}{subsection.3.1.1}
+\contentsline {subsection}{\numberline {3.1.2}What we did}{27}{subsection.3.1.2}
+\contentsline {section}{\numberline {3.2}Synchrony, asynchrony and buffering}{27}{section.3.2}
+\contentsline {section}{\numberline {3.3}State, statelessness and continuations}{27}{section.3.3}
+\contentsline {chapter}{\numberline {4}Parsing requests, monadically}{29}{chapter.4}
+\contentsline {section}{\numberline {4.1}Obligatory parsing monad}{29}{section.4.1}
+\contentsline {section}{\numberline {4.2}Your parser combinators are showing}{29}{section.4.2}
+\contentsline {section}{\numberline {4.3}EBNF and why higher levels of abstraction are better}{29}{section.4.3}
+\contentsline {chapter}{\numberline {5}The domain model as abstract syntax}{31}{chapter.5}
+\contentsline {section}{\numberline {5.1}Our abstract syntax}{31}{section.5.1}
+\contentsline {section}{\numberline {5.2}Our application domain model}{31}{section.5.2}
+\contentsline {section}{\numberline {5.3}A transform pipeline}{31}{section.5.3}
+\contentsline {chapter}{\numberline {6}Zippers and contexts and URI's, oh my!}{33}{chapter.6}
+\contentsline {section}{\numberline {6.1}Zippers are not just for Bruno anymore}{33}{section.6.1}
+\contentsline {section}{\numberline {6.2}Constructing contexts and zippers from data types}{33}{section.6.2}
+\contentsline {section}{\numberline {6.3}Mapping URIs to zipper-based paths and back}{33}{section.6.3}
+\contentsline {chapter}{\numberline {7}A review of collections as monads}{35}{chapter.7}
+\contentsline {section}{\numberline {7.1}Monad as container}{35}{section.7.1}
+\contentsline {section}{\numberline {7.2}Monads and take-out}{35}{section.7.2}
+\contentsline {chapter}{\numberline {8}Domain model, storage and state}{37}{chapter.8}
+\contentsline {section}{\numberline {8.1}Mapping our domain model to storage}{37}{section.8.1}
+\contentsline {section}{\numberline {8.2}Storage and language-integrated query}{37}{section.8.2}
+\contentsline {section}{\numberline {8.3}Continuations revisited}{37}{section.8.3}
+\contentsline {chapter}{\numberline {9}Putting it all together}{39}{chapter.9}
+\contentsline {section}{\numberline {9.1}Our web application end-to-end}{39}{section.9.1}
+\contentsline {section}{\numberline {9.2}Deploying our application}{39}{section.9.2}
+\contentsline {subsection}{\numberline {9.2.1}Why we are not deploying on GAE}{39}{subsection.9.2.1}
+\contentsline {section}{\numberline {9.3}From one web application to web framework}{39}{section.9.3}
+\contentsline {chapter}{\numberline {10}The semantic web}{41}{chapter.10}
+\contentsline {section}{\numberline {10.1}How our web framework enables different kinds of application queries}{41}{section.10.1}
+\contentsline {section}{\numberline {10.2}Searching for programs}{41}{section.10.2}
Please sign in to comment.
Something went wrong with that request. Please try again.