6 \title{Do you see what I see?
}
7 \subtitle{\emph{Functional pearl
} (
2016)
}
12 basicstyle=
\ttfamily\small
17 % Objective: what is the goal of this work, what problem is addressed, what was
18 % the current state of the art, who is the work aimed at?
20 \frametitle{About functional pearls
\ldots}
22 \item ICFP / Journal of Functional Programming
28 \item Prof.\ Philip Wadler
31 \item Prof.\ Ralf Hinze
37 \frametitle{Objective
}
38 \begin{block
}{Elaborate on the type system
}
41 \item Racket programming language
42 \item Implemented as macro
43 \item No extra syntax or annotations
44 \item Syntactical/static analyses
51 \item Pass typechecker? Correct program
\ldots
52 \item Solve problems with arity(indexed)
53 \item Dependant types expensive
58 % Proposal: if the paper presents a new idea, what, in a nutshell, is it?
60 \frametitle{Proposal (
1)
}
61 \begin{block
}{Notation
}
62 \texttt{$
\llbracket$e$
\rrbracket$
}- Elaboration function on $e$\\
65 \begin{block
}{Curry example
}
67 \texttt{$
\llbracket$ (curry ($
\lambda$ (x y) x)) $
\rrbracket$
}
68 &
\texttt{= (curry
\_2 ($
\lambda$ (x y) x))
}\\
70 \texttt{$
\llbracket$ (curry ($
\lambda$ (x y z) x)) $
\rrbracket$
}
71 &
\texttt{= (curry
\_3 ($
\lambda$ (x y z) x))
}\\
73 \texttt{$
\llbracket$ (curry ($
\lambda$ (x y z a) x)) $
\rrbracket$
}
74 &
\texttt{= (curry
\_4 ($
\lambda$ (x y z a) x))
}\\
82 \frametitle{Proposal (
2)
}
83 \begin{block
}{Printf type annotations
}
85 \texttt{$
\llbracket$ (printf "
{\textasciitilde}b"
2) $
\rrbracket$
}\\
86 \texttt{String Any * -> Void
}\\
\vspace{1em
}
88 \texttt{(printf "
{\textasciitilde}b" (
2:: Integer))
}\\
89 \texttt{String Integer -> Void
}
94 \frametitle{Proposal (
3)
}
95 \begin{block
}{And much more
\ldots}
97 \item Regular expressions
98 \item Database queries
99 \item Fixed size vectors
105 % Evidence: Support for claims - Theorems? Case studies? Simulations?
106 % Benchmarks? Does evidence address issues needed to support claims?
107 \begin{frame
}[fragile
]
108 \frametitle{Implementation (
1)
}
111 \item Expanded recursively before computation
115 (make-alias #'vector-length
124 \begin{frame
}[fragile
]
125 \frametitle{Implementation (
2)
}
126 \framesubtitle{Vector length
}
127 \begin{block
}{Vector notation racket
}
135 \begin{block
}{Length determination
}
138 (syntax-parser #:literals (make-vector)
140 (length (syntax->datum #'(e* ...)))
]
141 [(make-vector n:num/value)
142 (syntax->datum #'n.evidence)
]
149 \frametitle{Evidence
}
151 \item Portable to other languages with macro/templates
152 \item Increased binary size of $
4\%$
153 \item Implemented only for some features
155 \item No real downsides given
159 % Shoulders of giants...: what previous research does this work build on? What
160 % are the key underlying theoretical ideas? Software infrastructure?
162 \frametitle{Shoulders of giants
}
164 \item Papers on macros
165 \item Language/feature documentation
166 \item Meta programming
171 % Writing: analyse the writing
175 \item Implementation is not trivial or elegant
177 \item Literature
\ldots a lot of documentation
178 \item LISP like language knowledge
179 \item Implementation sections are late
180 \item Examples in not very popular functional language
184 \item Haskell: $
2800$
190 % Discussion points: end with questions which you think should arise
192 \frametitle{Discussion points
}
194 \item There should be more elaboration on the implementation.
195 \item Is the addition really helpful or does it just produce more
196 obfuscated compiler errors.
197 \item Paper should have been written in a more famous language.