% Keep this before the document class to calculate stuff correctly
%\RequirePackage{mathpazo}\normalfont % \mathit{\kappa} doesn't work
\RequirePackage{charter}\normalfont

% draft: Short title page, exact date-time of build, extra
%        footer with date
% final: official title page and footers
%
%\documentclass[12pt,draft,oldfontcommands]{memoir}
\documentclass[12pt,final,oldfontcommands]{memoir}

% Customization of memoir class to comply with dissertation guidelines
\RequirePackage{timestamp}


\RequirePackage[usenames,dvipsnames]{color}
\RequirePackage{dissertationfmt}
\RequirePackage[longnamesfirst]{natbib}
\RequirePackage{slatex}
\slatexseparateincludes
\RequirePackage{mathpartir}
\RequirePackage{dls-mmm}
\usepackage{ifthen}
%\usepackage[stable]{footmisc}
\RequirePackage{fancyvrb}
\RequirePackage{dls-macros}
\usepackage{amsmath}
\usepackage{amssymb}

\usepackage{ts}
\ifdraftdoc
\usepackage[pdftex,colorlinks=true,draft=false,linkcolor=black,citecolor=black,urlcolor=black]{hyperref}
\else
\usepackage[pdftex,colorlinks=true,draft=false,linkcolor=black,citecolor=black,urlcolor=black]{hyperref}
\fi
\usepackage[all]{hypcap}
\RequirePackage{memhfixc}

%\hyphenate{wrig-stad}

\newcommand{\cpp}{C++}
\newcommand{\csharp}{C\#}

\bibpunct{[}{]}{;}{a}{}{,}

\leftcodeskip=5pt  %0pt plus 1fil
\rightcodeskip=1pt %% guarantees that no code blocks are broken across a
		   %% page -- need to do some shuffling for calculations 

\defschememathescape{$} %$

\setspecialsymbol{HPmodule-begin}{\keywordfont{\#\%module-begin}}
\setspecialsymbol{HPtop-interaction}{\keywordfont{\#\%top-interaction}}
\setspecialsymbol{HPapp}{\keywordfont{\#\%app}}
\setspecialsymbol{HPdatum}{\keywordfont{\#\%datum}}

\setkeyword{module-begin top-interaction}
\setkeyword{define/contract contract all-defined-out for}
\setspecialsymbol{typeKW}{\keywordfont{type}}
\setspecialsymbol{<=}{$\Leftarrow$}

\setkeyword{require/typed pdefine: Listof require-typed-struct lib 
  int
  planet Symbol Opaque require/opaque-type define-values values
  All cases define-type Any Pair let-values let*
  Char N B A S Path
  -> Number String Boolean : define: define-type-alias define-struct
  define-typed-struct module with-syntax syntax-case
  define-struct: let*: Refinement R provide for-syntax require 
  rename-out except-out all-from-out define-for-syntax
  begin-for-syntax match rename-in compiled-module define/contract
  #%app #%module-begin #%top-interaction class unit
  Integer inst}
\setspecialsymbol{lambda}{\ma{\lambda}}
\setspecialsymbol{lambda:}{\ma{\lambda}:}
\setspecialsymbol{l:}{\ma{\lambda}:}
\setspecialsymbol{hlang}{{\bf \#lang}}
\setspecialsymbol{langts}{{{\bf \#lang} typed-scheme}} 
\setspecialsymbol{langs}{{\bf \#lang} scheme} 
\setspecialsymbol{mu}{$\mu$} 
\setspecialsymbol{string->number}{\mbox{\variablefont{string}$\rightarrow$\variablefont{number}}}
\setspecialsymbol{->}{$\rightarrow$}
\setspecialsymbol{U}{\ma{\bigcup}}
\setspecialsymbol{-U>}{\ma{\stackrel{\mbox{(\usym\ {\bf Number} {\bf Boolean})}}{\to}}}
\setspecialsymbol{bover}{\ma{\stackrel{b}{\to}}}
\setspecialsymbol{bot}{\ma{\bot}}
\setspecialsymbol{ELIDED}{\mbox{$\mbox{\tiny ~~{\it omitted\/}~~} \over ~$}}
\setspecialsymbol{dotsa}{$\dots_{\alpha}$}
\setspecialsymbol{dotsb}{$\dots_{\beta}$}
\setspecialsymbol{dotsc}{$\dots_{\gamma}$}
\setspecialsymbol{alpha}{$\alpha$}
\setspecialsymbol{beta}{$\beta$}
\setspecialsymbol{gamma}{$\gamma$}
\setspecialsymbol{sigma}{$\sigma$}
\setspecialsymbol{tau}{$\tau$}
\setspecialsymbol{All}{$\forall$}
\setvariable{rec}

\def\multiargs{false}
\def\paths{false}
\def\dologic{false}

\ifthenelse{\equal{\multiargs}{true}}{
\margtrue
}
{
\margfalse
}

\ifthenelse{\equal{\paths}{true}}{
\pathtrue
}
{
\pathfalse
}

\ifthenelse{\equal{\dologic}{true}}{
\logictrue
}
{
\logicfalse
}




% Enable svn keyword expansion
%\RequirePackage{svn-multi}

%%% Technical stuff

%\RequirePackage{amsthm} % for the proof environment

%%% Typography customizations
%\RequirePackage{afterpage} % for the \afterpage command

\setcounter{tocdepth}{1}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


\mdef\l{\lambda}


\title{Typed Scheme: \\ {\large \textrm{From Scripts to Programs}}} 
\author{Sam Tobin-Hochstadt}

\makeindex

%\doublespacing

\begin{document}


%%% Front stuff
\frontmatter

% Cover page
\makeccsthesistitle

% Preface (abstract, acknowledgements)
\input{preface.tex}

% ToC, LoF, LoT, etc.
\cleardoublepage
\tableofcontents
\cleardoublepage
\listoffigures
%\listoftables

\newcounter{ex}


\newsavebox{\boxedtextbin}
\newenvironment{boxedtext}
{\begin{lrbox}{\boxedtextbin}
      \begin{minipage}{0.95 \textwidth}    }
{\end{minipage}\end{lrbox}
\begin{center}\fbox{\usebox{\boxedtextbin}}\end{center}}

\newbox\exbox

\newenvironment{exmp}{
\refstepcounter{ex}%
\begin{boxedtext}
\setbox\exbox=\vbox{\par\hfill\framebox{\small Example~\theex}}
\usebox\exbox
\vskip-1em
\vskip-\ht\exbox
\begin{SingleSpace*}}
{\end{SingleSpace*}
\end{boxedtext}}

\let\cite\citep

%%% Main document
\mainmatter


\input{intro.tex}

\chapter{Typed Scheme through Examples}
\label{chap:overview}
\input{informal}
\input{semiformal}

\chapter{Design Choices}
\label{chap:design}
\input{design}

\chapter{Prior Work}
\input{prior}

\chapter{Integrating Typed and Untyped Code}
\label{chap:integrate}
\input{integrate.tex}

\chapter{Occurrence Typing}
\label{chap:occur}
\input{occur}

\pathtrue

\chapter{Extensions to Occurrence Typing}
\label{chap:occur-extend}
\input{popl-formal2}

\logictrue

\input{popl-formal3}
\input{popl-formal4}

\chapter{Refinement Types}
\label{chap:refinement}
\input{mf-refinement}
\input{mf-extended-example}

\chapter[Variable-Arity Polymorphism]{Variable-Arity Polymorphism\footnote{This is joint work with T. Stephen Strickland~\cite{sthf:variable-arity}.}
}
\label{chap:dots}
{
\input{varar-intro}
\input{esop09/formal}
}
\chapter[Implementation]{Implementation\footnote{This is joint work
    with Ryan Culpepper and Matthew Flatt~\cite{ctf:macros}.}}
\label{chap:impl}
\input{scheme-syntax}
\input{scheme-type-one}
\input{scheme-type-multi}

\chapter[Evaluation]{Evaluation\footnote{Many of the programs in this chapter were
   originally ported to Typed Scheme by Ivan Gazeau.}}
\label{chap:exp}
\label{chap:eval}
\input{icse-exp}

\chapter{Related Work}
\label{chap:related}
\def\lateff{latent filter}
\def\lexeff{visible filter}
\def\subpred{sub-filter}

\input{related}

\chapter{Conclusion}
\label{chap:conclusion}
\input{conclusion}

%%% The bibliography
\bibliographystyle{plainnat}
%\bibliographystyle{plain}
\bibliography{new-popl}


%%% The appendix
%\appendix


%%% Back stuff
%\backmatter


\end{document}
