1
+ <!DOCTYPE html>
2
+ < html lang ="en ">
3
+ < head >
4
+ < meta charset ="utf-8 ">
5
+ < title > Haskell zine: mapping vs folding lists</ title >
6
+ < style > @font-face {font-family : 'threemedium' ;src : url ('https://alicja.dev/assets/fonts/three.eot' );src : url ('https://alicja.dev/assets/fonts/three.eot?#iefix' ) format ('embedded-opentype' ), url ('https://alicja.dev/assets/fonts/three.woff2' ) format ('woff2' ), url ('https://alicja.dev/assets/fonts/three.woff' ) format ('woff' ), url ('https://alicja.dev/assets/fonts/three.ttf' ) format ('truetype' ), url ('https://alicja.dev/assets/fonts/three.svg#threemedium' ) format ('svg' );font-weight : normal;font-style : normal}body {font : 18px "Trebuchet MS" , Helvetica, sans-serif;font : 32px "threemedium" ;margin-top : 20px ;text-align : right}input [type = "checkbox" ], input [type = "radio" ]{position : absolute;visibility : hidden}# trebuchet + label , # three + label {margin-right : 30px ;cursor : pointer;color : # 000 }# trebuchet + label {font : 18px "Trebuchet MS" , Helvetica, sans-serif}# three + label {font : 32px "threemedium" }# three : checked + .three-label {color : # b2b3b8 ;display : none}# trebuchet : checked + .trebuchet-label {color : # b2b3b8 ;display : none}# three : checked ~ .zine {font : 32px "threemedium" }# trebuchet : checked ~ .zine {font : 18px "Trebuchet MS" , Helvetica, sans-serif}.zine {margin : 0 auto;max-width : 840px ;text-align : left}@media print{@page { size : auto portrait; margin : 0cm ; }.zine { margin : 1cm ; -webkit-print-color-adjust : exact; }# trebuchet + label , # three + label { display : none; }}.map {color : # ee4266 }.fold {color : # ff6700 }.fold-base {color : # b2b3b8 }.input-function {color : # 8f4898 }.foldmap-example {margin : 2em auto}.fold-example , .map-example {margin : 10px auto}.element {display : inline-block}.annotation , .value {display : block;text-align : center;width : 100px }.base {width : 30px }.operator {width : 25px }.annotation {font-size : 0.7em }.function-defintion {width : 400px ;text-align : left}</ style >
7
+ </ head >
8
+ < body >
9
+ < input id ="trebuchet " type ="radio " name ="font ">
10
+ < label for ="trebuchet " class ="font-button trebuchet-label "> Trebuchet</ label >
11
+
12
+ < input id ="three " type ="radio " name ="font " checked >
13
+ < label for ="three " class ="font-button three-label "> Three</ label >
14
+
15
+ < div class ="zine ">
16
+ < h2 > Mapping vs folding lists</ h2 >
17
+ < div class ="foldmap-example ">
18
+ < div class ="info-line ">
19
+ < span class ="map "> MAP</ span > : apply a function to each element of a list
20
+ </ div >
21
+ < div class ="map-example ">
22
+ < div class ="element ">
23
+ < span class ="value base map "> map</ span >
24
+ </ div >
25
+ < div class ="element operator ">
26
+ < span class ="value operator "> ::</ span >
27
+ </ div >
28
+ < div class ="element ">
29
+ < span class ="annotation "> function</ span >
30
+ < span class ="value input-function "> (a -> b)</ span >
31
+ </ div >
32
+ < div class ="element operator ">
33
+ < span class ="value operator "> -> </ span >
34
+ </ div >
35
+ < div class ="element ">
36
+ < span class ="annotation "> takes initial list</ span >
37
+ < span class ="value "> [ a ]</ span >
38
+ </ div >
39
+ < div class ="element operator ">
40
+ < span class ="value operator "> -> </ span >
41
+ </ div >
42
+ < div class ="element ">
43
+ < span class ="annotation "> returns a new list</ span >
44
+ < span class ="value "> [ b ]</ span >
45
+ </ div >
46
+ </ div >
47
+ < div class ="map-example ">
48
+ < div class ="element ">
49
+ < span class ="value base map "> map</ span >
50
+ </ div >
51
+ < div class ="element operator ">
52
+ < span class ="value operator "> </ span >
53
+ </ div >
54
+ < div class ="element ">
55
+ < span class ="value input-function "> _</ span >
56
+ </ div >
57
+ < div class ="element ">
58
+ < span class ="value operator "> </ span >
59
+ </ div >
60
+ < div class ="element ">
61
+ < span class ="value "> [ ]</ span >
62
+ </ div >
63
+ < div class ="element ">
64
+ < span class ="value operator "> =</ span >
65
+ </ div >
66
+ < div class ="element ">
67
+ < span class ="annotation "> </ span >
68
+ < span class ="value body "> [ ]</ span >
69
+ </ div >
70
+ </ div >
71
+ < div class ="map-example ">
72
+ < div class ="element ">
73
+ < span class ="value base map "> map</ span >
74
+ </ div >
75
+ < div class ="element ">
76
+ < span class ="value operator "> </ span >
77
+ </ div >
78
+ < div class ="element ">
79
+ < span class ="input-function value "> f</ span >
80
+ </ div >
81
+ < div class ="element ">
82
+ < span class ="value operator "> </ span >
83
+ </ div >
84
+ < div class ="element ">
85
+ < span class ="value "> (x:xs)</ span >
86
+ </ div >
87
+ < div class ="element ">
88
+ < span class ="value operator "> =</ span >
89
+ </ div >
90
+ < div class ="element ">
91
+ < span class ="function-definition ">
92
+ < span class ="input-function "> f</ span > x : < span class ="map "> map</ span > < span class ="input-function "> f</ span > xs
93
+ </ span >
94
+ </ div >
95
+ </ div >
96
+ < div class ="map-example ">
97
+ < div class ="element ">
98
+ < span class ="value base map "> map</ span >
99
+ </ div >
100
+ < div class ="element ">
101
+ < span class ="value operator "> </ span >
102
+ </ div >
103
+ < div class ="element ">
104
+ < span class ="input-function value "> (+1)</ span >
105
+ </ div >
106
+ < div class ="element ">
107
+ < span class ="value operator "> </ span >
108
+ </ div >
109
+ < div class ="element ">
110
+ < span class ="value "> [1, 2, 3]</ span >
111
+ </ div >
112
+ < div class ="element ">
113
+ < span class ="value operator "> =</ span >
114
+ </ div >
115
+ < div class ="element ">
116
+ < span class ="function-definition ">
117
+ [1< span class ="map "> +1</ span > , 2< span class ="map "> +1</ span > , 3< span class ="map "> +1</ span > ] = [2, 3, 4]
118
+ </ span >
119
+ </ div >
120
+ </ div >
121
+ </ div >
122
+ < div class ="foldmap-example ">
123
+ < div class ="info-line ">
124
+ < span class ="fold "> FOLD</ span > : reduce a list by replacing each cons with the function
125
+ </ div >
126
+ < div class ="fold-example ">
127
+ < div class ="element ">
128
+ < span class ="value base fold "> foldr</ span >
129
+ </ div >
130
+ < div class ="element operator ">
131
+ < span class ="value operator "> ::</ span >
132
+ </ div >
133
+ < div class ="element ">
134
+ < span class ="annotation "> function</ span >
135
+ < span class ="value input-function "> (a -> b)</ span >
136
+ </ div >
137
+ < div class ="element operator ">
138
+ < span class ="value operator "> -> </ span >
139
+ </ div >
140
+ < div class ="element ">
141
+ < span class ="annotation "> base case</ span >
142
+ < span class ="value fold-base "> b</ span >
143
+ </ div >
144
+ < div class ="element operator ">
145
+ < span class ="value operator "> -> </ span >
146
+ </ div >
147
+ < div class ="element ">
148
+ < span class ="annotation "> takes initial list</ span >
149
+ < span class ="value "> [ a ]</ span >
150
+ </ div >
151
+ < div class ="element operator ">
152
+ < span class ="value operator "> -> </ span >
153
+ </ div >
154
+ < div class ="element ">
155
+ < span class ="annotation "> returns a value</ span >
156
+ < span class ="value "> b </ span >
157
+ </ div >
158
+ </ div >
159
+ < div class ="fold-example ">
160
+ < div class ="element ">
161
+ < span class ="value base fold "> foldr</ span >
162
+ </ div >
163
+ < div class ="element operator ">
164
+ < span class ="value operator "> </ span >
165
+ </ div >
166
+ < div class ="element ">
167
+ < span class ="value input-function "> _</ span >
168
+ </ div >
169
+ < div class ="element operator ">
170
+ < span class ="value operator "> </ span >
171
+ </ div >
172
+ < div class ="element ">
173
+ < span class ="value fold-base "> z</ span >
174
+ </ div >
175
+ < div class ="element ">
176
+ < span class ="value operator "> </ span >
177
+ </ div >
178
+ < div class ="element ">
179
+ < span class ="value "> [ ]</ span >
180
+ </ div >
181
+ < div class ="element ">
182
+ < span class ="value operator "> =</ span >
183
+ </ div >
184
+ < div class ="element ">
185
+ < span class ="value fold-base "> z</ span >
186
+ </ div >
187
+ </ div >
188
+ < div class ="fold-example ">
189
+ < div class ="element ">
190
+ < span class ="value base fold "> fold</ span >
191
+ </ div >
192
+ < div class ="element ">
193
+ < span class ="value operator "> </ span >
194
+ </ div >
195
+ < div class ="element ">
196
+ < span class ="input-function value "> f</ span >
197
+ </ div >
198
+ < div class ="element operator ">
199
+ < span class ="value operator "> </ span >
200
+ </ div >
201
+ < div class ="element ">
202
+ < span class ="value fold-base "> z</ span >
203
+ </ div >
204
+ < div class ="element ">
205
+ < span class ="value operator "> </ span >
206
+ </ div >
207
+ < div class ="element ">
208
+ < span class ="value "> (x:xs)</ span >
209
+ </ div >
210
+ < div class ="element ">
211
+ < span class ="value operator "> =</ span >
212
+ </ div >
213
+ < div class ="element ">
214
+ < span class ="function-definition ">
215
+ < span class ="input-function "> f</ span > x
216
+ (< span class ="fold "> foldr</ span > < span class ="input-function "> f</ span > < span class ="fold-base "> z</ span > xs)
217
+ </ span >
218
+ </ div >
219
+ </ div >
220
+ < div class ="fold-example ">
221
+ < div class ="element ">
222
+ < span class ="value base fold "> foldr</ span >
223
+ </ div >
224
+ < div class ="element ">
225
+ < span class ="value operator "> </ span >
226
+ </ div >
227
+ < div class ="element ">
228
+ < span class ="input-function value "> (+)</ span >
229
+ </ div >
230
+ < div class ="element operator ">
231
+ < span class ="value operator "> </ span >
232
+ </ div >
233
+ < div class ="element ">
234
+ < span class ="value fold-base "> 0</ span >
235
+ </ div >
236
+ < div class ="element ">
237
+ < span class ="value operator "> </ span >
238
+ </ div >
239
+ < div class ="element ">
240
+ < span class ="value "> [1, 2, 3]</ span >
241
+ </ div >
242
+ < div class ="element ">
243
+ < span class ="value operator "> =</ span >
244
+ </ div >
245
+ < div class ="element ">
246
+ < span class ="function-definition ">
247
+ 1< span class ="fold "> + </ span > 2< span class ="fold "> + </ span > 3< span class ="fold "> + </ span > < span class ="fold-base "> 0</ span > = 6
248
+ </ span >
249
+ </ div >
250
+ </ div >
251
+ </ div >
252
+ </ div >
253
+ </ body >
254
+ </ html >
0 commit comments