-
Notifications
You must be signed in to change notification settings - Fork 5
/
index.html
152 lines (95 loc) · 7.69 KB
/
index.html
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
147
148
149
150
151
152
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Recent Posts - The Life Monadic</title>
<link rel="stylesheet" href="//cdn.jsdelivr.net/pure/0.4.2/pure-min.css" />
<link rel="stylesheet" type="text/css" href="./css/skin.css" />
<link rel="stylesheet" type="text/css" href="./css/default.css" />
<link rel="stylesheet" type="text/css" href="./css/syntax.css" />
<!-- Favicon -->
<link rel="apple-touch-icon" sizes="180x180" href="./apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="./favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="./favicon-16x16.png">
<link rel="manifest" href="./site.webmanifest">
<link rel="mask-icon" href="./safari-pinned-tab.svg" color="#5bbad5">
<meta name="msapplication-TileColor" content="#603cba">
<meta name="theme-color" content="#f1e7f6">
<!-- Twitter card -->
<meta name="twitter:card" content="summary" />
<meta name="twitter:site" content="@duplode" />
<meta name="twitter:title" content="Recent Posts" />
</head>
<body class="pure-skin-duplode">
<div class="pure-g-r">
<div class="pure-u-1-4">
<div id="navigation" class="no-print">
<div class="pure-menu pure-menu-open">
<a class="pure-menu-heading menu-title">
The Life<br>
Monadic<br>
<span class="menu-subtitle">by duplode</span>
</a>
<ul>
<li><a href="./index.html">Home</a></li>
<li><a href="./posts.html">Posts</a></li>
<li><a href="./about.html">About</a></li>
<li><a href="./rss.xml">RSS</a></li>
</ul>
</div>
</div>
</div>
<div class="pure-u-3-4">
<div id="content">
<h1>Recent Posts</h1>
<div class="post-teaser">
<h2>Every Distributive is Representable</h2>
<p>“Every <code>Distributive</code> <code>Functor</code> is actually <code>Representable</code>”, as the documentation for <a href="https://hackage.haskell.org/package/adjunctions-4.4/docs/Data-Functor-Rep.html"><code>Representable</code></a> tells us straight away, and yet it is far from obvious why that should be the case. At first glance, <a href="https://hackage.haskell.org/package/distributive-0.6.2.1/docs/Data-Distributive.html"><code>Distributive</code></a>, the dual to <code>Traversable</code>, appears to have little if anything to do with <code>Representable</code>, the class for functors isomorphic to functions. The goal of this post is making this connection explicit. In the process, we will tease out a fair amount of information about the two classes, and also contemplate what makes it tricky to fully bridge the gap to <code>Representable</code>.</p>
<div>
</div>
<p><a href="./posts/every-distributive-is-representable.html">Read more</a> - February 7, 2022</p>
</div>
<div class="post-teaser">
<h2>Divisible and the Monoidal Quartet</h2>
<p>A recent blog post by Gabriella Gonzalez, <a href="https://www.haskellforall.com/2021/10/co-applicative-programming-style.html"><em>Co-Applicative programming style</em></a>, has sparked discussion on ergonomic ways to make use of <a href="https://hackage.haskell.org/package/contravariant-1.5.5">the <code>Divisible</code> type class</a>. The conversation pointed to an interesting rabbit hole, and jumping into it resulted in these notes, in which I attempt to get a clearer view of picture of the constellation of monoidal functor classes that <code>Divisible</code> belongs to. The gist of it is that “<code>Divisible</code> is a contravariant <code>Applicative</code>, and <code>Decidable</code> is a contravariant <code>Alternative</code>” is not a full picture of the relationships between the classes, as there are a few extra connections that aren’t obvious to the naked eye.</p>
<div>
</div>
<p><a href="./posts/divisible-and-the-monoidal-quartet.html">Read more</a> - November 12, 2021</p>
</div>
<div class="post-teaser">
<h2>Idempotent Applicatives, Parametricity, and a Puzzle</h2>
<p>Some applicative functors are idempotent, in the sense that repeating an effect is the same as having it just once. An example and a counterexample are <code>Maybe</code> and <code>IO</code>, respectively (contrast <code>Just 3 *> Just 3</code> with <code>print 3 *> print 3</code>). More precisely, idempotency means that <code>f <$> u <*> u = (\x -> f x x) <$> u</code>. Given the informal description I began with, though, one might wonder whether the simpler property <code>u *> u = u</code>, which seems to capture the intuition about repeated effects, is equivalent to the usual idempotency property. In this post, I will tell how I went about exploring this conjecture, as well as a few things I learnt about parametricity along the way.</p>
<div>
</div>
<p><a href="./posts/idempotent-applicatives-parametricity-and-a-puzzle.html">Read more</a> - April 1, 2019</p>
</div>
<div class="post-teaser">
<h2>Traversable: A Remix</h2>
<p><code>Traversable</code> is a fun type class. It lies at a crossroad, where many basic Haskell concepts meet, and it can be presented in multiple ways that provide complementary intuitions. In this post, <code>Traversable</code> will be described from a slightly unusual point of view, or at least one that is not put into foreground all that often. We will suspend for a moment the picture of walking across a container while using an effectful function, and instead start by considering what can be done with effectful functions.</p>
<div>
</div>
<p><a href="./posts/traversable-a-remix.html">Read more</a> - May 19, 2017</p>
</div>
<div class="post-teaser">
<h2>What's in a Fold: The Basic Catamorphism in recursion-schemes</h2>
<p>This article is meant as an accessible introduction to the most basic recursion scheme, the catamorphism. It won’t engage in deep dives into theory, or survey practical motives for using recursion schemes – that will be covered by the further reading suggestions at the end. Rather, its main goal is simply offering a concrete presentation of how folds can be generalised. This presentation will be done in terms of the types and combinators used by the <a href="https://hackage.haskell.org/package/recursion-schemes-5.0.1"><em>recursion-schemes</em></a> library, so that the article doubles as an introduction to some of its key conventions.</p>
<div>
</div>
<p><a href="./posts/whats-in-a-fold.html">Read more</a> - March 10, 2017</p>
</div>
<div class="post-teaser">
<h2>Casual Hacking With stack, Reloaded</h2>
<p>It has been quite a while since I <a href="./posts/casual-hacking-with-stack.html">wrote</a> about how to use stack for casual play outside of the context of a conventional Haskell project. In the meantime, stack has gained a feature called the <em>global project</em> which in many cases makes it possible to do quick experiments with essentially no setup, while still taking advantage of the infrastructure provided through stack.</p>
<div>
</div>
<p><a href="./posts/casual-hacking-with-stack-reloaded.html">Read more</a> - February 26, 2017</p>
</div>
</div>
<div id="footer" class="no-print">
<p>Powered by <a href="http://jaspervdj.be/hakyll">Hakyll</a></p>
</div>
</div>
</div>
</body>
</html>