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
}
134 \begin{block
}{Length determination
}
137 (syntax-parser #:literals (make-vector)
139 (length (syntax->datum #'(e* ...)))
]
140 [(make-vector n:num/value)
141 (syntax->datum #'n.evidence)
]
148 \frametitle{Implementation (
3)
}
149 Only vector examples given\\
150 Very complex examples
154 \frametitle{Evidence
}
156 \item Portable to other languages with macro/templates
157 \item Increased binary size of $
4\%$
158 \item Implemented only for some features
160 \item No real downsides given
164 % Shoulders of giants...: what previous research does this work build on? What
165 % are the key underlying theoretical ideas? Software infrastructure?
167 \frametitle{Shoulders of giants
}
169 \item Papers on macros
170 \item Language/feature documentation
171 \item Meta programming
176 % Writing: analyse the writing
180 \item Implementation is not trivial or elegant
182 \item Literature
\ldots a lot of documentation
183 \item LISP like language knowledge
184 \item Implementation sections are late
185 \item Examples in not very popular functional language
189 \item Haskell: $
2800$
195 % Discussion points: end with questions which you think should arise
197 \frametitle{Discussion points
}
199 \item There should be more elaboration on the implementation.
200 \item Is the addition really helpful or does it just produce more
201 obfuscated compiler errors.
202 \item Paper should have been written in a more famous language.