Sign in

Sjoerd Visscher

@sjoerdvisscher.w3future.com
223 followers 219 following 210 posts

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

PostsRepliesMedia
Sjoerd Visscher @sjoerdvisscher.w3future.com · 28/09/2026
proarrow-0.1.0.0 is now live on hackage! hackage-content.haskell.org/package/proa... #haskell #categorytheory
hackage-content.haskell.org
proarrow
Category theory with a central role for profunctors
040
Reposted by Sjoerd Visscher
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 · 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 · 25/09/2026
Wij hebben de parasols al opgeborgen!
100
Reposted by Sjoerd Visscher
terrorjack.bsky.social @terrorjack.bsky.social · 19/09/2026
playground.terrorjack.workers.dev weekend toy project: haskell playground based on ghc-10.0, with multi-file editor, ghci repl and haskell language server; transitive deps of hls like aeson are also included. note that this is a vibe coded poc, if you have allergies to this kind of thing
playground.terrorjack.workers.dev
Haskell playground
232
Sjoerd Visscher @sjoerdvisscher.w3future.com · 16/09/2026
I would have thought it would be less work to handle this properly than to throw this error message.
000
Sjoerd Visscher @sjoerdvisscher.w3future.com · 14/09/2026
Awesome!
000
Reposted by Sjoerd Visscher
Thomas Marsh @thomasmarsh.bsky.social · 14/09/2026
Apologies for the AI use, but I wanted to explore this in Oleg's visual style. Probably a lot of errors - I know spent too much time trying to get this even to this point. Script to generate it: gist.github.com/thomasmarsh/...
111
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 · 13/09/2026
r6research.livejournal.com/28050.ht… and chrispenner.ca/posts/kaleidoscopes All this optical wordplay makes them hard to search for indeed.
r6research.livejournal.com
Grate: A new kind of Optic
James Deikun (known as xplat on freenode) and I discovered a new kind of Optic today. If not discovered, then at least characterized it. We know that lenses correspond to optics over strong profunctors, and prisms correspond to optics over choice profuctors. The open question was, what corresponds…
110
Sjoerd Visscher @sjoerdvisscher.w3future.com · 13/09/2026
Oh, they sit above lenses and grates, what a mess!
110
Sjoerd Visscher @sjoerdvisscher.w3future.com · 12/09/2026
Sorry that I didn’t reply, but it’s a bit hard to explain and somewhat subtle. You’re better off reading a blogpost about them I think.
110
Sjoerd Visscher @sjoerdvisscher.w3future.com · 12/09/2026
This is getting complicated! #haskell #categorytheory
A diagram of optics
130
Sjoerd Visscher @sjoerdvisscher.w3future.com · 11/09/2026
No-maths holidays are good to have!
011
Sjoerd Visscher @sjoerdvisscher.w3future.com · 11/09/2026
I drafted an article explaining it in more detail: github.com/sjoerdvissch...
120
Reposted by Sjoerd Visscher
Arnaud Spiwack @aspiwack.bsky.social · 09/09/2026
That is, for any object A, we have an arrow α_A : F A -> G A, such that for all R∈Rel(A,B), F(R) ⊆ G(R(α,α)) If F is a functor, parametric arrows should be natural, for instance. This should give us an algebraic framework to talk about what we've been doing in PLT. 6/7
101
Sjoerd Visscher @sjoerdvisscher.w3future.com · 08/09/2026
The main trick is to generalize strength/tambara from p a b -> p (Act m a) (Act m b) for some monoidal action to f ⊙ p ⊙ g -> p, for some subset of (f,g) profunctor pairs. If f ⊣ g then you get a lawful optic. But for example a getter requires g to be the terminal profunctor.
111
Sjoerd Visscher @sjoerdvisscher.w3future.com · 08/09/2026
This is part of proarrow. I will put it on hackage soon!
110
Sjoerd Visscher @sjoerdvisscher.w3future.com · 08/09/2026
Probably no single one is new. What might be new is that they are all together in a single library with automatic conversion between the connected ones. What’s definitely new is the way they are implemented.
111
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 · 02/09/2026
Pretty cool that (*) + (-) means loosely what is says "add the product to the difference", i.e. a function that adds the product of its arguments to the difference of its arguments.
010
Sjoerd Visscher @sjoerdvisscher.w3future.com · 31/08/2026
Zeker de moeite waard! Ik heb ze in 2013 in het Evoluon gezien.
100
Sjoerd Visscher @sjoerdvisscher.w3future.com · 29/08/2026
So I have a native iPad app!
010
Sjoerd Visscher @sjoerdvisscher.w3future.com · 27/08/2026
I’ve been working on proarrow for 3 years and only now I find out that all adjunctions between profunctors are trivial, as in they are always adjunctions between the two representables induced by a functor. At least it’s true for Hask enriched profunctors. Something to do with Cauchy completeness.
020
Reposted by Sjoerd Visscher
Haskell Interlude @haskellinterlude.bsky.social · 26/08/2026
In today’s episode, we’re joined by Brent Yorgey, Associate Professor of CS at Hendrix College and the creator of the Diagrams vector graphics library and Swarm, a 2D programming and resource gathering game. We talk about teaching, DSLs, and competitive coding. haskell.foundation/podcast/85/
haskell.foundation
Brent Yorgey
In today's episode, we're joined by Brent Yorgey, Associate Professor of Computer Science at Hendrix College and the creator, among other things, of the Diagrams vector graphics library and Swarm, a 2...
096
Sjoerd Visscher @sjoerdvisscher.w3future.com · 24/08/2026
It seems like they read it as "stop using X for all official purposes of any entity" instead of "stop using X for all official purposes of the UK Government".
000
Sjoerd Visscher @sjoerdvisscher.w3future.com · 24/08/2026
Yes, but in those cases there's no feedback loop. With code, if the quality of the output goes down, the quality of the input goes down too and with that the usefulness of the tool. If the code is a mess, the AIs struggle too.
120
Sjoerd Visscher @sjoerdvisscher.w3future.com · 21/08/2026
A lot of people have a different association with KI, especially if you grew up among cow farmers like me.
010
Sjoerd Visscher @sjoerdvisscher.w3future.com · 21/08/2026
“Even though”, just like (same etymology even) the al in albeit.
010
Sjoerd Visscher @sjoerdvisscher.w3future.com · 20/08/2026
Dutch has this word "al", which frequently starts a sentence, and then it looks like "Al", indistinguishable from "AI" in most fonts, really annoying!
210
Reposted by Sjoerd Visscher
Conor Sheridan @qucat.bsky.social · 19/08/2026
Cool observation: one can build a bicategory whose objects are free word monoids over alphabets and whose morphisms are Turing transducers. A Turing machine then appears as a specialization of a guarded trace between a Moore machine (tape) and a Mealy machine (controller).
001
Sjoerd Visscher @sjoerdvisscher.w3future.com · 17/08/2026
It also includes a fix for a bug I reported , but I realized only last week that it only fixes the minimized case, not my original code!
010
Reposted by Sjoerd Visscher
Conor Sheridan @qucat.bsky.social · 14/08/2026
Looking for non-trivial examples of virtual double categories arising in TCS or logic, ideally many-object examples where the virtuality has a concrete computational/logical meaning.
011
Sjoerd Visscher @sjoerdvisscher.w3future.com · 11/08/2026
Yes this, but then say every hour a new developer. AIs are really bad at learning from what they did previously.
100
Sjoerd Visscher @sjoerdvisscher.w3future.com · 11/08/2026
Using AI to write your code is like hiring a consultant to write your code, but continuously hiring a different one. No matter how good you set it up, documenting everything etc., over time the result is terrible.
111
Reposted by Sjoerd Visscher
Zanzi Tangle @zanzi.bsky.social · 06/08/2026
after two years of development, I finally demoed Jermaine for the first time - a language with fully symmetric data and codata, and native call-cc.
5447
Sjoerd Visscher @sjoerdvisscher.w3future.com · 06/08/2026
Well it's a hobby so I don't consider discipline to be a factor. The question is: will it be more enjoyable if I can share the fun?
110
Sjoerd Visscher @sjoerdvisscher.w3future.com · 06/08/2026
Thanks! The downside though is that I'm having too much fun adding stuff instead of doing the things that makes this library actually useful for other people like writing documentation...
120
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 · 05/08/2026
NIETS is zo fijn! IETS is veel!
110
Sjoerd Visscher @sjoerdvisscher.w3future.com · 31/07/2026
What is the difference? David doesn’t say.
100
Reposted by Sjoerd Visscher
Arnaud Spiwack @aspiwack.bsky.social · 28/07/2026
I want to explain what's going on here. Because it's quite interesting. The type of monads over the category of presheaves is given by class PMonad f where return :: p i -> f i (>>=) :: f p i -> (forall j. p j -> f q j) -> f q i (just follow the textbooks) 1/11
175
Sjoerd Visscher @sjoerdvisscher.w3future.com · 24/07/2026
I was hoping to be able to write `class Seg (s :: Time) (t :: Time) | t -> s where seg :: s &> t`, then `leap` would simply be `withDict @(Seg s t)`. But this loops...
000
Sjoerd Visscher @sjoerdvisscher.w3future.com · 24/07/2026
Yeah, I rewrote the code without magic, and there's only one place (where it says `k lesson t`) where two available morphisms are composed automatically. But I guess with a compiler for a more complicated language there would be more opportunities.
100
Sjoerd Visscher @sjoerdvisscher.w3future.com · 24/07/2026
The code is here by the way: github.com/pigworker/Sa...
github.com
Samizdat/EffW.hs at main · pigworker/Samizdat
being bits and pieces I'm inclined to leave lying around - pigworker/Samizdat
000
Sjoerd Visscher @sjoerdvisscher.w3future.com · 24/07/2026
I played around with the code a bit to see if I could get it to work without unsafeCoerce, using GHC's withDict. But there's really no wiggle room at all, the compiler quickly goes into an infinite loop.
200
Sjoerd Visscher @sjoerdvisscher.w3future.com · 24/07/2026
What an amazing hack! This is a trick that works for any category, reifying any morphisms you have available into dictionaries, and then letting the compiler compose them together automatically to get the right morphism you need! #haskell
131
Sjoerd Visscher @sjoerdvisscher.w3future.com · 14/07/2026
So I designed a version that has parts that are the intersection of 3 perpendicular 12-sided prisms: ochafik.com/openscad2/#H...
ochafik.com
OpenSCAD Playground
OpenSCAD Playground: edit .scad models and render them to STL from the browser (WebAssembly build OpenSCAD, with Monaco editor and STL Viewer)
000
Sjoerd Visscher @sjoerdvisscher.w3future.com · 14/07/2026
I have an elasticube wooden puzzle at home, and yesterday I saw a version in a museumshop with balls instead of cubes. This allows for different shapes to be made, but the smooth surface of the balls caused the shapes to lack stiffness.
ochafik.com
OpenSCAD Playground
OpenSCAD Playground: edit .scad models and render them to STL from the browser (WebAssembly build OpenSCAD, with Monaco editor and STL Viewer)
110
Reposted by Sjoerd Visscher
ICFP Programming Contest 2026 @icfpcontest.bsky.social · 11/07/2026
Pre-registration for this year's ICFP programming contest is open! You may register your team at your leisure at icfpcontest2026.com/signup The contest begins on July 24th - just under two weeks to go!
icfpcontest2026.com
Register — ICFP Programming Contest 2026
053