Skip to content

Commit ac1c363

Browse files
committed
Add a new zine on mapping vs folding in Haskell.
1 parent b3d0e49 commit ac1c363

File tree

9 files changed

+635
-3
lines changed

9 files changed

+635
-3
lines changed

bin/build.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ const buildHTML = (partialsPath, css) => {
1414
partials.forEach((partial) => {
1515
const fileName = partial.replace(/[{|}| ]/g, '');
1616
const filePath = path.join(partialsPath, `${fileName}.html`);
17-
17+
1818
let file = '';
1919
if (!fs.existsSync(filePath)) {
2020
console.error(`Partial ${fileName} missing, skipping`);

haskell/folding_mapping/index.html

+254
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,254 @@
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>
+130
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
<div class="foldmap-example">
2+
<div class="info-line">
3+
<span class="fold">FOLD</span>: reduce a list by replacing each cons with the function
4+
</div>
5+
<div class="fold-example">
6+
<div class="element">
7+
<span class="value base fold">foldr</span>
8+
</div>
9+
<div class="element operator">
10+
<span class="value operator">::</span>
11+
</div>
12+
<div class="element">
13+
<span class="annotation">function</span>
14+
<span class="value input-function">(a -> b)</span>
15+
</div>
16+
<div class="element operator">
17+
<span class="value operator">-></span>
18+
</div>
19+
<div class="element">
20+
<span class="annotation">base case</span>
21+
<span class="value fold-base">b</span>
22+
</div>
23+
<div class="element operator">
24+
<span class="value operator">-></span>
25+
</div>
26+
<div class="element">
27+
<span class="annotation">takes initial list</span>
28+
<span class="value">[ a ]</span>
29+
</div>
30+
<div class="element operator">
31+
<span class="value operator">-></span>
32+
</div>
33+
<div class="element">
34+
<span class="annotation">returns a value</span>
35+
<span class="value"> b </span>
36+
</div>
37+
</div>
38+
<div class="fold-example">
39+
<div class="element">
40+
<span class="value base fold">foldr</span>
41+
</div>
42+
<div class="element operator">
43+
<span class="value operator"></span>
44+
</div>
45+
<div class="element">
46+
<span class="value input-function">_</span>
47+
</div>
48+
<div class="element operator">
49+
<span class="value operator"></span>
50+
</div>
51+
<div class="element">
52+
<span class="value fold-base">z</span>
53+
</div>
54+
<div class="element">
55+
<span class="value operator"></span>
56+
</div>
57+
<div class="element">
58+
<span class="value">[ ]</span>
59+
</div>
60+
<div class="element">
61+
<span class="value operator">=</span>
62+
</div>
63+
<div class="element">
64+
<span class="value fold-base">z</span>
65+
</div>
66+
</div>
67+
<div class="fold-example">
68+
<div class="element">
69+
<span class="value base fold">fold</span>
70+
</div>
71+
<div class="element">
72+
<span class="value operator"></span>
73+
</div>
74+
<div class="element">
75+
<span class="input-function value">f</span>
76+
</div>
77+
<div class="element operator">
78+
<span class="value operator"></span>
79+
</div>
80+
<div class="element">
81+
<span class="value fold-base">z</span>
82+
</div>
83+
<div class="element">
84+
<span class="value operator"></span>
85+
</div>
86+
<div class="element">
87+
<span class="value">(x:xs)</span>
88+
</div>
89+
<div class="element">
90+
<span class="value operator">=</span>
91+
</div>
92+
<div class="element">
93+
<span class="function-definition">
94+
<span class="input-function">f</span> x
95+
(<span class="fold">foldr</span> <span class="input-function">f</span> <span class="fold-base">z</span> xs)
96+
</span>
97+
</div>
98+
</div>
99+
<div class="fold-example">
100+
<div class="element">
101+
<span class="value base fold">foldr</span>
102+
</div>
103+
<div class="element">
104+
<span class="value operator"></span>
105+
</div>
106+
<div class="element">
107+
<span class="input-function value">(+)</span>
108+
</div>
109+
<div class="element operator">
110+
<span class="value operator"></span>
111+
</div>
112+
<div class="element">
113+
<span class="value fold-base">0</span>
114+
</div>
115+
<div class="element">
116+
<span class="value operator"></span>
117+
</div>
118+
<div class="element">
119+
<span class="value">[1, 2, 3]</span>
120+
</div>
121+
<div class="element">
122+
<span class="value operator">=</span>
123+
</div>
124+
<div class="element">
125+
<span class="function-definition">
126+
1<span class="fold">+ </span>2<span class="fold">+ </span>3<span class="fold">+ </span><span class="fold-base">0</span> = 6
127+
</span>
128+
</div>
129+
</div>
130+
</div>

0 commit comments

Comments
 (0)