Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
branch: monadic
Fetching contributors…

Cannot retrieve contributors at this time

106 lines (105 sloc) 7.395 kb
\BOOKMARK [0][-]{section*.1}{Contents}{}
\BOOKMARK [0][-]{chapter*.5}{Preface}{}
\BOOKMARK [0][-]{chapter.1}{Motivation and Background}{}
\BOOKMARK [1][-]{section.1.1}{Where are we}{chapter.1}
\BOOKMARK [2][-]{subsection.1.1.1}{The concurrency squeeze: from the hardware up, from the web down}{section.1.1}
\BOOKMARK [2][-]{subsection.1.1.2}{Ubiquity of robust, high-performance virtual machines}{section.1.1}
\BOOKMARK [2][-]{subsection.1.1.3}{Advances in functional programming, monads and the awkward squad}{section.1.1}
\BOOKMARK [1][-]{section.1.2}{Where are we going}{chapter.1}
\BOOKMARK [2][-]{subsection.1.2.1}{A functional web}{section.1.2}
\BOOKMARK [2][-]{subsection.1.2.2}{DSL-based design}{section.1.2}
\BOOKMARK [1][-]{section.1.3}{How are we going to get there}{chapter.1}
\BOOKMARK [2][-]{subsection.1.3.1}{Leading by example}{section.1.3}
\BOOKMARK [2][-]{subsection.1.3.2}{Chapter map}{section.1.3}
\BOOKMARK [0][-]{chapter.2}{Toolbox}{}
\BOOKMARK [1][-]{section.2.1}{Introduction to notation and terminology}{chapter.2}
\BOOKMARK [2][-]{subsection.2.1.1}{Scala}{section.2.1}
\BOOKMARK [2][-]{subsection.2.1.2}{Maths}{section.2.1}
\BOOKMARK [1][-]{section.2.2}{Introduction to core design patterns}{chapter.2}
\BOOKMARK [2][-]{subsection.2.2.1}{A little history}{section.2.2}
\BOOKMARK [1][-]{section.2.3}{Variations in presentation}{chapter.2}
\BOOKMARK [2][-]{subsection.2.3.1}{A little more history}{section.2.3}
\BOOKMARK [0][-]{chapter.3}{An IO-monad for http streams}{}
\BOOKMARK [1][-]{section.3.1}{Code first, questions later}{chapter.3}
\BOOKMARK [2][-]{subsection.3.1.1}{An HTTP-request processor}{section.3.1}
\BOOKMARK [2][-]{subsection.3.1.2}{What we did}{section.3.1}
\BOOKMARK [1][-]{section.3.2}{Synchrony, asynchrony and buffering}{chapter.3}
\BOOKMARK [1][-]{section.3.3}{State, statelessness and continuations}{chapter.3}
\BOOKMARK [0][-]{chapter.4}{Parsing requests, monadically}{}
\BOOKMARK [1][-]{section.4.1}{Obligatory parsing monad}{chapter.4}
\BOOKMARK [1][-]{section.4.2}{Your parser combinators are showing}{chapter.4}
\BOOKMARK [1][-]{section.4.3}{EBNF and why higher levels of abstraction are better}{chapter.4}
\BOOKMARK [2][-]{subsection.4.3.1}{Different platforms, different parsers}{section.4.3}
\BOOKMARK [2][-]{subsection.4.3.2}{Different performance constraints, different parsers}{section.4.3}
\BOOKMARK [2][-]{subsection.4.3.3}{Maintainability}{section.4.3}
\BOOKMARK [0][-]{chapter.5}{The domain model as abstract syntax}{}
\BOOKMARK [1][-]{section.5.1}{Our abstract syntax}{chapter.5}
\BOOKMARK [1][-]{section.5.2}{Our application domain model}{chapter.5}
\BOOKMARK [1][-]{section.5.3}{The project model}{chapter.5}
\BOOKMARK [2][-]{subsection.5.3.1}{Abstract syntax}{section.5.3}
\BOOKMARK [2][-]{subsection.5.3.2}{Concrete syntax -- and presentation layer}{section.5.3}
\BOOKMARK [2][-]{subsection.5.3.3}{Domain model}{section.5.3}
\BOOKMARK [1][-]{section.5.4}{A transform pipeline}{chapter.5}
\BOOKMARK [0][-]{chapter.6}{Zippers and contexts and URI's, oh my!}{}
\BOOKMARK [1][-]{section.6.1}{Zippers are not just for Bruno anymore}{chapter.6}
\BOOKMARK [2][-]{subsection.6.1.1}{The history of the zipper}{section.6.1}
\BOOKMARK [1][-]{section.6.2}{Zipper and one-holed contexts}{chapter.6}
\BOOKMARK [1][-]{section.6.3}{Differentiation and contexts}{chapter.6}
\BOOKMARK [2][-]{subsection.6.3.1}{Regular types}{section.6.3}
\BOOKMARK [2][-]{subsection.6.3.2}{Container types}{section.6.3}
\BOOKMARK [1][-]{section.6.4}{Generic zipper -- differentiating navigation}{chapter.6}
\BOOKMARK [2][-]{subsection.6.4.1}{Delimited continuations}{section.6.4}
\BOOKMARK [1][-]{section.6.5}{Species of Structure}{chapter.6}
\BOOKMARK [1][-]{section.6.6}{Constructing contexts and zippers from data types}{chapter.6}
\BOOKMARK [2][-]{subsection.6.6.1}{Contexts}{section.6.6}
\BOOKMARK [2][-]{subsection.6.6.2}{Zippers}{section.6.6}
\BOOKMARK [1][-]{section.6.7}{Mapping URIs to zipper-based paths and back}{chapter.6}
\BOOKMARK [2][-]{subsection.6.7.1}{Path and context}{section.6.7}
\BOOKMARK [2][-]{subsection.6.7.2}{Homomorphisms and obfuscation}{section.6.7}
\BOOKMARK [1][-]{section.6.8}{Applying zippers to our project}{chapter.6}
\BOOKMARK [2][-]{subsection.6.8.1}{Navigating and editing terms}{section.6.8}
\BOOKMARK [2][-]{subsection.6.8.2}{Navigating and editing projects}{section.6.8}
\BOOKMARK [0][-]{chapter.7}{A review of collections as monads}{}
\BOOKMARK [1][-]{section.7.1}{Sets, Lists and Languages}{chapter.7}
\BOOKMARK [2][-]{subsection.7.1.1}{Witnessing Sets and Lists monadicity}{section.7.1}
\BOOKMARK [2][-]{subsection.7.1.2}{Languages and Sets of Words}{section.7.1}
\BOOKMARK [2][-]{subsection.7.1.3}{Of lenses and bananas}{section.7.1}
\BOOKMARK [1][-]{section.7.2}{Containers and syntax}{chapter.7}
\BOOKMARK [2][-]{subsection.7.2.1}{The algebra of Sets}{section.7.2}
\BOOKMARK [2][-]{subsection.7.2.2}{The algebra of Lists}{section.7.2}
\BOOKMARK [2][-]{subsection.7.2.3}{The algebra of Sets of Words}{section.7.2}
\BOOKMARK [1][-]{section.7.3}{Algebras}{chapter.7}
\BOOKMARK [2][-]{subsection.7.3.1}{Kleisli}{section.7.3}
\BOOKMARK [2][-]{subsection.7.3.2}{Eilenberg-Moore}{section.7.3}
\BOOKMARK [1][-]{section.7.4}{Monad as container}{chapter.7}
\BOOKMARK [1][-]{section.7.5}{Monads and take-out}{chapter.7}
\BOOKMARK [2][-]{subsection.7.5.1}{Option as container}{section.7.5}
\BOOKMARK [2][-]{subsection.7.5.2}{I/O monad for contrast}{section.7.5}
\BOOKMARK [2][-]{subsection.7.5.3}{Matching gazintas and gazoutas}{section.7.5}
\BOOKMARK [1][-]{section.7.6}{Co-monad and take-out}{chapter.7}
\BOOKMARK [1][-]{section.7.7}{Hopf structure}{chapter.7}
\BOOKMARK [1][-]{section.7.8}{Container and control}{chapter.7}
\BOOKMARK [2][-]{subsection.7.8.1}{Delimited continuations reconsidered}{section.7.8}
\BOOKMARK [0][-]{chapter.8}{Domain model, storage and state}{}
\BOOKMARK [1][-]{section.8.1}{Mapping our domain model to storage}{chapter.8}
\BOOKMARK [2][-]{subsection.8.1.1}{Functional and relational models}{section.8.1}
\BOOKMARK [2][-]{subsection.8.1.2}{Functional and XML models}{section.8.1}
\BOOKMARK [2][-]{subsection.8.1.3}{ORM}{section.8.1}
\BOOKMARK [1][-]{section.8.2}{Storage and language-integrated query}{chapter.8}
\BOOKMARK [2][-]{subsection.8.2.1}{LINQ and [language=Scala]!for!-comprehensions}{section.8.2}
\BOOKMARK [1][-]{section.8.3}{Continuations revisited}{chapter.8}
\BOOKMARK [2][-]{subsection.8.3.1}{Stored state}{section.8.3}
\BOOKMARK [2][-]{subsection.8.3.2}{Transactions}{section.8.3}
\BOOKMARK [0][-]{chapter.9}{Putting it all together}{}
\BOOKMARK [1][-]{section.9.1}{Our web application end-to-end}{chapter.9}
\BOOKMARK [1][-]{section.9.2}{Deploying our application}{chapter.9}
\BOOKMARK [2][-]{subsection.9.2.1}{Why we are not deploying on GAE}{section.9.2}
\BOOKMARK [1][-]{section.9.3}{From one web application to web framework}{chapter.9}
\BOOKMARK [0][-]{chapter.10}{The semantic web}{}
\BOOKMARK [1][-]{section.10.1}{Referential transparency}{chapter.10}
\BOOKMARK [1][-]{section.10.2}{Composing monads}{chapter.10}
\BOOKMARK [1][-]{section.10.3}{Semantic application queries}{chapter.10}
\BOOKMARK [2][-]{subsection.10.3.1}{Other logical operations}{section.10.3}
\BOOKMARK [1][-]{section.10.4}{Searching for programs}{chapter.10}
\BOOKMARK [2][-]{subsection.10.4.1}{A new foundation for search}{section.10.4}
\BOOKMARK [2][-]{subsection.10.4.2}{Examples}{section.10.4}
Jump to Line
Something went wrong with that request. Please try again.