-
Notifications
You must be signed in to change notification settings - Fork 0
/
sums-and-products.tex
146 lines (129 loc) · 2.72 KB
/
sums-and-products.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
\begin{frame}
\begin{center}
Consider this (real) problem
\end{center}
\end{frame}
\begin{frame}
\begin{center}
You are writing a data type, such as \lstinline{data Aircraft}
\end{center}
\end{frame}
\begin{frame}
\begin{center}
So you decide that an \lstinline{Aircraft} is the product of
\end{center}
\begin{itemize}
\item \lstinline{Manufacturer}
\item \lstinline{Designation}
\item \lstinline{Registration}
\item \lstinline{Category}
\end{itemize}
\end{frame}
\begin{frame}
\begin{center}
and a \lstinline{Category} is the sum of
\end{center}
\begin{itemize}
\item \lstinline{Aeroplane}
\item \lstinline{Helicopter}
\item \lstinline{Gyroplane}
\item \lstinline{Airship}
\item \ldots
\end{itemize}
\end{frame}
\begin{frame}
\begin{center}
and on the \lstinline{Aeroplane} constructor you have the product of
\end{center}
\begin{itemize}
\item \lstinline{NonEmpty Propulsion}
\item \ldots
\end{itemize}
\end{frame}
\begin{frame}
\begin{center}
and a \lstinline{Propulsion} is the product of
\end{center}
\begin{itemize}
\item \lstinline{Engine}
\item \lstinline{MountPosition}
\end{itemize}
\end{frame}
\begin{frame}
\begin{center}
and an \lstinline{Engine} is the product of
\end{center}
\begin{itemize}
\item \lstinline{Manufacturer}
\item \lstinline{Designation}
\item \lstinline{EngineType}
\end{itemize}
\end{frame}
\begin{frame}
\begin{center}
and an \lstinline{EngineType} is the sum of
\end{center}
\begin{itemize}
\item \lstinline{ICE}
\item \lstinline{Jet}
\item \lstinline{Electric}
\item \lstinline{Rocket}
\end{itemize}
\end{frame}
\begin{frame}
\begin{center}
and an \lstinline{ICE} is the product of
\end{center}
\begin{itemize}
\item \lstinline{AirInduction}
\item \lstinline{FuelInduction}
\item \lstinline{Ignition}
\item \lstinline{ICEType}
\end{itemize}
\end{frame}
\begin{frame}
\begin{center}
and etc etc
\end{center}
\end{frame}
\begin{frame}
\begin{center}
You write all your code in terms of this \lstinline{Aircraft} data type
\end{center}
\end{frame}
\begin{frame}
\begin{center}
Then you create a database schema and store aircraft in it
\end{center}
\end{frame}
\begin{frame}
\begin{center}
\ldots and then \ldots
\end{center}
\end{frame}
\begin{frame}
\begin{center}
Project Manager: ``can we just add an image to internal combustion engines?''
\end{center}
\end{frame}
\begin{frame}
\begin{center}
You have just been asked to add a field to a deeply-nested product data type
\end{center}
\end{frame}
\begin{frame}[fragile]
\frametitle{oh no}
\begin{center}
\includegraphics[height=0.24\textheight]{image/ohno.jpg}
\end{center}
\end{frame}
\begin{frame}
\begin{center}
Your data type tree needs to grow
\end{center}
\end{frame}
\begin{frame}
\begin{center}
Trees That Grow is an approach to this extensibility
\end{center}
\end{frame}