Sign in

Sjoerd Visscher

@sjoerdvisscher.w3future.com
222 followers 219 following 216 posts

#haskell #categorytheory #lumatone 👫 @boekencurator.bsky.social 🏠 w3future.com 💼 tweag.io 🗣️ strijpskamerkoor.nl

PostsRepliesMedia
Sjoerd Visscher @sjoerdvisscher.w3future.com · 26/09/2026
If you have laws-as-code and you have code-as-diagrams, you get (you guessed it) laws-as-diagrams for free! github.com/sjoerdvissch...
The 6 laws of a traced monoidal category, rendered as diagrams.
042
Sjoerd Visscher @sjoerdvisscher.w3future.com · 14/09/2026
It's in, but I had to drop the ascii again.
New optics diagram, now including Glass.
010
Sjoerd Visscher @sjoerdvisscher.w3future.com · 12/09/2026
This is getting complicated! #haskell #categorytheory
A diagram of optics
130
Sjoerd Visscher @sjoerdvisscher.w3future.com · 07/09/2026
New optics just dropped! #haskell #category-theory
Optics diagram, showing:

-- >   Iso                <:  Lens, MonoidalLens, Prism, Kaleidoscope
-- >   Lens               <:  Getter, AffineTraversal
-- >   MonoidalLens       <:  Getter, MonoidalTraversal
-- >   Prism              <:  Review, AffineTraversal, MonoidalTraversal
-- >   Kaleidoscope       <:  MonoidalTraversal, Grate
-- >   Grate              <:  Setter
-- >   Getter             <:  AffineFold
-- >   AffineTraversal    <:  AffineFold, Traversal
-- >   MonoidalTraversal  <:  Traversal
-- >   AffineFold         <:  Fold
-- >   Traversal          <:  Fold, Setter
350
Sjoerd Visscher @sjoerdvisscher.w3future.com · 06/08/2026
I never thought the proarrow library would grow this big. I expected to hit a major roadblock at some point but that just didn't happen. sjoerdvisscher.github.io/proarrow/ #haskell
The contents of the proarrow library listing its 137 modules.
160
Sjoerd Visscher @sjoerdvisscher.w3future.com · 23/06/2026
Is de hittekracht-schaal nu al weer toe aan een update? www.hittekracht.net/verwachting @knmi.nl @helgavanleur.bsky.social
Hittekracht verwachting voor de komende week, vandaag 8, dan 5 dagen 10 (!!) en maandag weer 7.
100
Sjoerd Visscher @sjoerdvisscher.w3future.com · 22/05/2026
Isn't it amazing that these are all different representations of the same thing, each useful in its own way?
(s -> a, s -> b -> t)
forall f. Functor f => (a -> f b) -> s -> f t       
forall p. Strong p => p a b -> p s t
exist m. (s -> (m, a), (m, b) -> t)
forall y. (s, t -> y) -> (a, b -> y)
062
Sjoerd Visscher @sjoerdvisscher.w3future.com · 19/02/2026
trace @_ @(D '["A"]) @(D '["X"]) @(D '["Y"]) (node "f" == node @'["Z"] "g")
A dot diagram showing the trace of the composition of functions f : A x X -> Z and g : Z -> A x Y
000
Sjoerd Visscher @sjoerdvisscher.w3future.com · 19/02/2026
line || unitAdj @"L" @"R" == counitAdj @"L" @"R" || line
A dot diagram showing a zigzag composition of the unit and counit of an adjunction
100
Sjoerd Visscher @sjoerdvisscher.w3future.com · 19/02/2026
(comult @(D '["Y"]) == line || counit) || (comult @(D '["X"]) == mappend @(D '["X"])) || (comult @(D '["Z"]) == counit @(D '["Z"]) || line)
A dot diagram showing monoid and comonoid operations.
000
Sjoerd Visscher @sjoerdvisscher.w3future.com · 31/10/2025
Poster image of the TV series Poker Face
010
Sjoerd Visscher @sjoerdvisscher.w3future.com · 05/09/2025
Yay! (It's a live leaderboard, I don't have many more ideas so others will probably catch up) #IcfpContest2025 #haskell
Current leaderboard of the ICFP contest, I'm 4th at the moment!
030
Sjoerd Visscher @sjoerdvisscher.w3future.com · 13/08/2025
There's a perfectly valid instance for Generic1 ((->) a), given an instance for Generic a. Should this be included in base? Probably not. But would anything break? I don't know! #haskell gist.github.com/sjoerdvissch...
Rep1 ((->) Bool) = Par1 :*: Par1
Rep1 ((->) (a, b)) = Rec1 ((->) a) :.: Rec1 ((->) b)
Rep1 ((->) [a]) = Par1 :*: (Rec1 ((->) a) :.: Rec1 ((->) [a]))
030
Sjoerd Visscher @sjoerdvisscher.w3future.com · 14/07/2025
Smallcheck fun: Let's just check the (->) profunctor instance on functions on a tiny datatype, say data Three = A | B | C. Hmm, why is it taking so long?? Oh, there are 27 functions of type Three -> Three, and the composition test takes 5 of those, that's 27^5 :-)
Profunctor Laws
  dimap id id = id:  OK
    27 tests completed
  dimap composition: OK (62.03s)
    14348907 tests completed
020
Sjoerd Visscher @sjoerdvisscher.w3future.com · 11/05/2025
Just got this one with the central force turned on!
110
Sjoerd Visscher @sjoerdvisscher.w3future.com · 23/02/2025
I love it when generalizations bring out more symmetry! #haskell #categorytheory sjoerdvisscher.github.io/proarrow/Pro... sjoerdvisscher.github.io/proarrow/Pro...
Code showing that Promonad (Writer w) needs Monoid w and Procomonad (Writer w) needs Comonoid w.Code showing that Promonad (Reader r) needs Comonoid r and Procomonad (Reader r) needs Monoid r.
010
Sjoerd Visscher @sjoerdvisscher.w3future.com · 09/01/2025
Still loving the view from my home office window!
030
Sjoerd Visscher @sjoerdvisscher.w3future.com · 03/01/2025
This is the actual code. (Note that I don't draw vSplit and vCombine) The original proof is here: ncatlab.org/nlab/show/2-...
vId' l' ||| unit @f @g
  === ( vCombine
          === limitUniv @j
            ( vSplit
                === (limit @j === vSplit) ||| vId @f
                === vId @d ||| counit @f @g
            )
      )
    ||| vId @g
020
Sjoerd Visscher @sjoerdvisscher.w3future.com · 03/01/2025
The first success with squares in proarrow! I managed to implement preservation of limits by right adjoints using squares. I tried it before without but got bogged down with details. sjoerdvisscher.github.io/proarrow/Pro...
Some screenshots of the documentation, see the link!Some screenshots of the documentation, see the link!Some screenshots of the documentation, see the link!
161
Sjoerd Visscher @sjoerdvisscher.w3future.com · 28/12/2024
I’m finally a real 🤓 now!
Me with my first ever glasses on.
050
Sjoerd Visscher @sjoerdvisscher.w3future.com · 10/12/2024
You can't read "A survey of graphical languages for monoidal categories" by Peter Selinger and then not post the impressive diagram at the end!
A large diagram showing 25 different graphical languages and their relationships.
1102
Sjoerd Visscher @sjoerdvisscher.w3future.com · 07/12/2024
I never used Control.Parellel.Strategies before, but I did today with #AdventOfCode. It's just adding `withStrategy (parTraversable rseq)` and each line is solved in parallel, all pure! #haskell
main :: IO ()
main = interact (show . sum . withStrategy (parTraversable rseq) . map (val . parse) . lines)
080