%% Verze pro jednostranný tisk:
% Okraje: levý 40mm, pravý 25mm, horní a dolní 25mm
% (ale pozor, LaTeX si sám přidává 1in)
\documentclass[12pt,a4paper]{report}
\setlength\textwidth{145mm}
\setlength\textheight{247mm}
\setlength\oddsidemargin{15mm}
\setlength\evensidemargin{15mm}
\setlength\topmargin{0mm}
\setlength\headsep{0mm}
\setlength\headheight{0mm}
% \openright zařídí, aby následující text začínal na pravé straně knihy
\let\openright=\clearpage

%% Pokud tiskneme oboustranně:
% \documentclass[12pt,a4paper,twoside,openright]{report}
% \setlength\textwidth{145mm}
% \setlength\textheight{247mm}
% \setlength\oddsidemargin{15mm}
% \setlength\evensidemargin{0mm}
% \setlength\topmargin{0mm}
% \setlength\headsep{0mm}
% \setlength\headheight{0mm}
% \let\openright=\cleardoublepage

\usepackage[utf8]{inputenc}

\usepackage{graphicx}
\usepackage{amsthm}
\usepackage[inference]{semantic}

\usepackage[unicode]{hyperref}
%\usepackage[anythingbreaks]{breakurl}
\hypersetup{pdftitle=Maintainable type classes for Haskell}
\hypersetup{pdfauthor=František Farka}

\usepackage{listings}
%\usepackage{cite}
%\usepackage[backend=biber,sorting=none]{biblatex}
\usepackage[backend=biber]{biblatex}
\usepackage{MnSymbol}

\usepackage{tikz} 
\usetikzlibrary{arrows,decorations.pathmorphing,backgrounds,fit,positioning,shapes,chains}

% Tato makra přesvědčují mírně ošklivým trikem LaTeX, aby hlavičky kapitol
% sázel příčetněji a nevynechával nad nimi spoustu místa. Směle ignorujte.
%\makeatletter
%\def\@makechapterhead#1{
%  {\parindent \z@ \raggedright \normalfont
%   \Huge\bfseries \thechapter. #1
%   \par\nobreak
%   \vskip 20\p@
%}}
%\def\@makeschapterhead#1{
%  {\parindent \z@ \raggedright \normalfont
%   \Huge\bfseries #1
%   \par\nobreak
%   \vskip 20\p@
%}}
%\makeatother

% Trochu volnější nastavení dělení slov, než je default.
\lefthyphenmin=2
\righthyphenmin=2



\addbibresource{references.bib}
\lstloadlanguages{Haskell}
%%\lstset{language=Haskell}
\lstnewenvironment{HaskellCode}
	{\lstset{}%
		\csname lst@SetFirstLabel\endcsname}
	{\csname lst@SaveFirstLabel\endcsname}
	\lstset{
		basicstyle=\small\ttfamily,
		escapeinside={/+}{+/},
		flexiblecolumns=false,
		basewidth={0.5em,0.45em},
		literate=
			{+}{{$+$}}1
			{/}{{$/$}}1
			{*}{{$*$}}1
			{=}{{$=$}}1 
			{==}{{$\equiv$}}1 
			{/=}{{$\neq$}}1
			{>}{{$>$}}1 
			{<}{{$<$}}1
			{\\}{{$\lambda$}}1
			{++}{{$+\!\!\!+$}}1
			{::}{{$:\!\!\!:$}}1
			{\\\\}{{\char`\\\char`\\}}1
			{->}{{$\rightarrow$}}2
			{>=}{{$\geq$}}2
			{<-}{{$\leftarrow$}}2
			{<=}{{$\leq$}}2
			{=>}{{$\Rightarrow$}}2
			{\ .\ }{{$\circ$}}2
			{(.)}{{($\circ$)}}2
			{<<}{{$\ll$}}2
			{>>}{{$\gg$}}2
			{>>=}{{$>\!\!>\!\!=$}}2
			{<<<}{{$\lll$}}2
			{>>>}{{$\ggg$}}2
			{-<}{{$\leftY$}}1
			{^<<}{{$\hat{}\!\!\ll$}}2
			{^>>}{{$\hat{}\!\!\gg$}}2
			{|}{{$\mid$}}1
			{undefined}{{$\bot$}}1
			{not\ }{{$\neg$}}1
			{`elem`}{{$\in$}}1
			{forall}{{$\forall$}}1
			{pat}{{{\em pat}}}3
			{exp}{{{\em exp}}}3
			{cdecls}{{{\em cdecls}}}6
			{idecls}{{{\em idecls}}}6
			{decls}{{{\em decls}}}5
			{guard}{{{\em guard}}}5
			{cx}{{{\em cx}}}2
	}

%%
%% Commands
%%
\newcommand{\HFoo}{{\tt Foo}}
\newcommand{\HBar}{{\tt Bar}}
\newcommand{\HBaz}{{\tt Baz}}
\newcommand{\HQux}{{\tt Qux}}
\newcommand*{\hprime}[1]{{\bf #1}}
\newcommand{\tr}[1]{\mbox{{\rm #1}}}
\newcommand{\bkq}{\mbox{\tt \char'022}} % syntax backquote

%%
%% Theorems
%%
\newtheorem{theorem}{Theorem}

\author{František Farka}

\title{Maintainable type classes for Haskell}

\begin{document}
% Trochu volnější nastavení dělení slov, než je default.
\lefthyphenmin=2
\righthyphenmin=2

%%%
%%% Titulní strana práce
%%%

\pagestyle{empty}
\pagenumbering{roman}
\begin{center}

\large

Charles University in Prague

\medskip

Faculty of Mathematics and Physics

\vfill

{\bf\Large MASTER THESIS}

\vfill

\centerline{\mbox{\includegraphics[width=60mm]{img/logo.eps}}}

\vfill
\vspace{5mm}

{\LARGE František Farka}

\vspace{15mm}

% Název práce přesně podle zadání
{\LARGE\bfseries Maintainable type classes for Haskell}

\vfill

% Název katedry nebo ústavu, kde byla práce oficiálně zadána
% (dle Organizační struktury MFF UK)
Department of Theoretical Computer Science and Mathematical Logic

\vfill

\begin{tabular}{rl}

Supervisor of the master thesis: & RNDr. Petr Pudlák, Ph.D.\\
\noalign{\vspace{2mm}}
Study programme: & Informatics \\
\noalign{\vspace{2mm}}
Specialization: & Theoretical Computer Science \\
\end{tabular}

\vfill

% Zde doplňte rok
Prague 2014

\end{center}

\newpage

%%% Následuje vevázaný list -- kopie podepsaného "Zadání diplomové práce".
%%% Toto zadání NENÍ součástí elektronické verze práce, nescanovat.

%%% Na tomto místě mohou být napsána případná poděkování (vedoucímu práce,
%%% konzultantovi, tomu, kdo zapůjčil software, literaturu apod.)

\openright

\noindent
%Dedication.
I would like to thank my supervisor for his guidance and immense patience as I
was not always the most diligent student. I would also like thank my
friends for their valuable comments and insight the helped me to gain in many
discussion on the topic of this thesis.

And last but not least I owe my deepest gratitude to my parents for their
unlimited love and support.

\newpage

%%% Strana s čestným prohlášením k diplomové práci

\vglue 0pt plus 1fill

\noindent
I declare that I carried out this master thesis independently, and only with the cited
sources, literature and other professional sources.

\medskip\noindent
I understand that my work relates to the rights and obligations under the Act No.
121/2000 Coll., the Copyright Act, as amended, in particular the fact that the Charles
University in Prague has the right to conclude a license agreement on the use of this
work as a school work pursuant to Section 60 paragraph 1 of the Copyright Act.

\vspace{10mm}

\hbox{\hbox to 0.5\hsize{%
In Prague on \today
\hss}\hbox to 0.5\hsize{%
signature of the author
\hss}}

\vspace{20mm}
\newpage

%%% Povinná informační strana diplomové práce

\vbox to 0.5\vsize{
\setlength\parindent{0mm}
\setlength\parskip{5mm}

Název práce:
Udržovatelné typové třídy v Haskellu
% přesně dle zadání

Autor:
František Farka

Katedra:  % Případně Ústav:
Katedra teoretické informatiky a matematické logiky
% dle Organizační struktury MFF UK

Vedoucí diplomové práce:
RNDr. Petr Pudlák, Ph.D., Katedra teoretické informatiky a matematické logiky

Abstrakt:
% abstrakt v rozsahu 80-200 slov; nejedná se však o opis zadání diplomové práce
V této práci se zaměřujeme na dlouhodobý problém v systému typových tříd jazyka
Haskell. Konkrétně se zabýváme možnostmi zpětně kompatibilních úprav v
existujících hierarchiích tříd.
V první části práce podáváme stručný přehled jazyka. Následující část shrnuje
stávající navrhovaná řešení problému a rozebírá jejich vlastnosti. Na základě
tohoto rozboru předkládáme náš vlastní návrh na jazykové rozšíření.

V předposlední části uvádíme několik možných užití jazykového rozšíření a
srovnáváme jej s ostatními řešeními. Součástí práce je také proof-of-concept
implementace rozšíření pro kompilátor GHC, která je stručně popsána v poslední
části.

Klíčová slova: Haskell, typové třídy, udržovatelnost, výchozí instance nadtříd
% 3 až 5 klíčových slov

\vss}\nobreak\vbox to 0.49\vsize{
\setlength\parindent{0mm}
\setlength\parskip{5mm}

Title:
% přesný překlad názvu práce v angličtině
Maintainable type classes for Haskell

Author:
František Farka

Department:
Department of Theoretical Computer Science and Mathematical Logic
% dle Organizační struktury MFF UK v angličtině

Supervisor:
RNDr. Petr Pudlák, Ph.D., Department of Theoretical Computer Science and
Mathematical Logic
% Jméno a příjmení s tituly, pracoviště
% dle Organizační struktury MFF UK, případně plný název pracoviště
% mimo MFF UK v angličtině

Abstract:
% abstrakt v rozsahu 80-200 slov v angličtině; nejedná se však o překlad

In this thesis we address a long-term maintainability problem in Haskell type
class system. In particular we study a possibility of backward-compatible changes
in existing class hierarchies.
In the first part of the thesis we give a brief overview of the language. The
following part summarizes current proposed solutions to the problem and analyzes
their properties. Based on this analysis we derive our own language extension
proposal.

In the penultimate chapter we present several possible applications of the
language extension and compare the extension to other solutions. As a part of
the thesis we also give a proof-of-concept implementation of the extension for
the GHC compiler, which is briefly described in the last part of this thesis.

% zadání diplomové práce

Keywords: Haskell, type classes, maintainability, default superclass instances
% 3 až 5 klíčových slov v angličtině

\vss}

\newpage

%%% Strana s automaticky generovaným obsahem diplomové práce. U matematických
%%% prací je přípustné, aby seznam tabulek a zkratek, existují-li, byl umístěn
%%% na začátku práce, místo na jejím konci.

\openright
\pagestyle{plain}
\pagenumbering{arabic}
\setcounter{page}{1}



\tableofcontents

%%
%% Introduction
%%
\pagebreak

\input{tex/introduction}

%%
%% Chapter Haskell language description
%%
\pagebreak

\input{tex/ch_haskell}

%%
%% Chapter problem under consideration description
%%
\pagebreak

\input{tex/ch_problem}

%%
%% Chapter previous proposals
%%
\pagebreak

\input{tex/ch_prop}

%%
%% Chapter my proposal
%%
\pagebreak

\input{tex/ch_myprop}

%%
%% Chapter Relation to the Language Platform
%%
\pagebreak

\input{tex/ch_platform}

%%
%% Chapter Implementation
%%
\pagebreak

\input{tex/ch_implementation}

%%
%% Conclusion
%%
\pagebreak

\input{tex/conclusion}

%%
%% Further work
%%
\pagebreak

\input{tex/fwork}

%%
%% Bibliography
%%
\pagebreak

\printbibliography
\addcontentsline{toc}{chapter}{References}

%%
%% Figures
%%
\pagebreak

\listoffigures

%%
%% Appendicieѕ
%%

\appendix

%%
%% Appendix A - Lexical Structure
%%
\pagebreak

\input{tex/a_lex}

%%
%% Appendix B - Syntax of the Language
%%
\pagebreak

\input{tex/b_syn}

%%
%% Appendix C - Testfiles - DEPRECATED
%%
%\pagebreak

%\input{tex/c_tests}
%%
%% Appendix D - Debugging outputs
%%
\pagebreak

\input{tex/d_debug}

\openright
\end{document}
