Chris Penner
chrispenner.ca
Chris Penner
@chrispenner.ca
FP and Programming languages nerd
Building the Unison Language & Unison Share

📍Victoria BC 🇨🇦

https://chrispenner.ca
Reposted by Chris Penner
🚀 New deep dive: Distributed System Engineering in Unison

In our latest blog post, take a look at the design of the Volturno library: a distributed stream processing engine built atop Unison Cloud.

www.unison-lang.org/blog/volturn...
Distributed system engineering in Unison: Volturno · Unison programming language
We look at the design of Volturno, a streaming engine with exactly-once processing, to illustrate why Unison Cloud is a great enabler for distributed systems builders.
www.unison-lang.org
November 4, 2025 at 8:26 PM
Reposted by Chris Penner
🤯 Unison in the browser!?

Dan Freeman's new library, Proscenium, runs Unison code in WebAssembly.

Its companion library, @dfreeman/playbill, contains a walk-through of various features and live examples on Unison Cloud!

Play a game in your browser entirely in Unison; better yet, write your own!
@dfreeman/playbill | Unison Share
A walkthrough of building UIs with Proscenium, including several example apps.
share.unison-lang.org
October 28, 2025 at 6:01 PM
Reposted by Chris Penner
📽️ Here's a quick video for anyone just getting started with Unison.

The gist of it: install the UCM, create a scratch file in the right place, and have fun programming!
Starting the UCM and setting up a scratch file
This video covers the basics of starting the Unison Codebase Manager (UCM) and writing your first bits of Unison code in a scratch file. We walk through: * Installing Unison on your system (Mac, Linux, or Windows) * Starting the UCM in a working directory * Creating .u scratch files and ensuring the UCM is watching for changes Helpful links: * Install Unison here: https://www.unison-lang.org/docs/quickstart/#step-1-install-unison * Get the UCM Desktop app: https://github.com/unisonweb/ucm-desktop/releases * Join the Unison community: https://www.unison-lang.org/discord
youtu.be
October 22, 2025 at 6:19 PM
Don't get too hung up on #Monads, there are other ways to sequence effects; including Arrows; and they provide even better static analysis!

Let me know what you think :)

#Haskell

chrispenner.ca/posts/arrow-...
Exploring Arrows for sequencing effects
Monads are <em>one</em> way to sequence effects, but they're not the only way!
chrispenner.ca
October 21, 2025 at 2:41 AM
I'd really like to speak with whoever thought it was a good idea for the public and private JWK's to be represented by the same type, have the same name, with just a few missing parameters...

Ah yes, the presence or absence of this "d" parameter could tank my entire company... seems safe to me :|
October 15, 2025 at 9:54 PM
Having a 3D printer at home is such a life-hack. Just printed some custom french-cleats to hang a giant 7ft long painting and it made it 10x easier.
October 12, 2025 at 5:49 PM
I've spent hours over the last months writing a post about how mutexes suck and everyone should use STM instead; but have come to the realization that even STM is more complex than necessary.

What's your decision-making process when building a concurrent and/or parallel system?

See mine below 👇
October 11, 2025 at 11:31 PM
Reposted by Chris Penner
I wrote about AI and programming.

About the identity challenges we are facing as programmers and the potential erasure of craft.

There's a fun little easter egg in the header as well :)

hojberg.xyz/the-programm...
The Programmer Identity Crisis ❈ Simon Højberg ❈ Principal Frontend Engineer
On AI, Creativity, and Craft
hojberg.xyz
October 7, 2025 at 11:42 PM
I'm very pleased to call Simon ( @hojberg.xyz ) my co-worker, team-mate and friend, go check out this wonderfully written take.

hojberg.xyz/the-programm...
The Programmer Identity Crisis ❈ Simon Højberg ❈ Principal Frontend Engineer
On AI, Creativity, and Craft
hojberg.xyz
October 8, 2025 at 8:01 PM
IMO we shouldn't be trying so hard to solve "the expression problem"; We should make it easy to update existing functions when types change, but it shouldn't always "silently work" with the new type; oftentimes existing functionality needs a human to look over it when there are changes!
October 8, 2025 at 7:37 PM
What do folks out there do for error handling in concurrent tasks in #Haskell?

For now I've settled on having an error `TMVar`, then use a `ki` structured concurrency scope which forks all my jobs and ends in an `(Right <$> awaitAll) <|> (Left <$> readTMVar errVar)`
October 6, 2025 at 7:40 PM
TIL callCC's return value isn't rank 2 polymorphic (but you can just route it through Void and use `absurd` to make it rank 2 polymorphic)

Spent too long staring at the error wondering why it wasn't working haha.

#Haskell

github.com/haskell/mtl/...
Why not use rank 2 polymorphism for `callCC` · Issue #127 · haskell/mtl
I think rank 2 polymorphism is a must-have for callCC, or this code will not compile: f :: Int -> String f x = (`runCont` id) $ callCC $ \exit -> do y <- case x of 0 -> exit "error: x == 0" _ -> pu...
github.com
October 6, 2025 at 7:35 PM
Huh, TIL that `Text.lines != Text.splitOn "\n"` when the string ends in a newline.
October 3, 2025 at 7:22 PM
Reposted by Chris Penner
You can now spin up Unison Cloud clusters on your own infrastructure!

✅ Build elastic distributed systems and services in vastly less code
✅ Fast, typed RPC
✅ Deployments in seconds
✅ Free to get started

youtu.be/0sZqI1XoGLY
Unison Cloud on your infrastructure
YouTube video by Unison Language
youtu.be
October 1, 2025 at 7:39 PM
Reposted by Chris Penner
Interesting article by @chrispenner.ca about why monads aren't the solution to everything, and a functor I've never crossed paths with called selective applicatives.

Still absorbing it, but great read as always. Check it out if that's your thing.

chrispenner.ca/posts/expres...
Monads are too powerful: The Expressiveness Spectrum
Monads are a useful tool, but what costs do we pay for their expressive power?
chrispenner.ca
September 27, 2025 at 12:55 PM
New blog post!

#Haskell is built on a foundation of Monads, but are they really the optimal way to sequence effects or should we keep looking for something better?

What's the big deal with Applicatives and Selective Applicatives?

Read on!

chrispenner.ca/posts/expres...
Monads are too powerful: The Expressiveness Spectrum
Monads are a useful tool, but what costs do we pay for their expressive power?
chrispenner.ca
September 27, 2025 at 4:02 AM
Reposted by Chris Penner
✨ The new dependents view shows everywhere a definition is used, broken down by category, as a separate card in Unison Share and the Unison Desktop app.

Your codebase is a bidirectional graph! You should be able to walk it as such.
September 26, 2025 at 8:01 PM
I'm pretty stoked on how well WASM seems to be working for languages that target it (not that there aren't difficulties there).

Even more stoked for these updates!
September 18, 2025 at 9:09 PM
It may in fact be a VeryBadIdea™ but I'm extremely tempted to duct tape my soldering iron to my 3D printer and use it to wood-burn the grid lines on the Go board I'm building...
September 16, 2025 at 5:48 AM
We all know AI is unreliable, but what's the worst case you've seen?

#zig
This one made me exhale sharply through my nose today:
September 8, 2025 at 2:46 AM
Programming languages really need a way to expose functions as "you can import this within this project and tests, but it's not public to other libraries"; somewhere in-between fully public and fully private.
August 22, 2025 at 4:30 PM
Reposted by Chris Penner
The GHC developers are very pleased to announce the availability of the first alpha prerelease of GHC 9.14.1.

Highlights:

* Major improvements to the Specialiser
* SSE/AVX support in the x86 native backend
* Significant improvements in the GHCi debugger

blog.haskell.org/ghc-9-14-1-a...

#Haskell
GHC 9.14.1-alpha1 is now available | The Haskell Programming Language's blog
blog.haskell.org
August 20, 2025 at 6:10 AM
Ah yes, I was just wondering how I could make my CI _less_ deterministic...
We (GitHub Next) put out a new project today - GitHub Agentic Workflows!

This is natural language programming for Continuous AI on GitHub.

eg "build the code, run the tests, read the coverage report, write tests", running daily, delivering test improvements in PRs

githubnext.com/projects/age...
GitHub Next | Agentic Workflows
GitHub Next Project: Towards Natural‑Language Programming for GitHub Actions
githubnext.com
August 15, 2025 at 11:59 PM
Is the non-#haskell part of the world aware STM exists?

I see a few languages have somewhat broken implementations...

#STM is truly a revolutionary tool for any kind of async/concurrent/parallel programming and new languages would do well to ensure they can implement it well!
August 15, 2025 at 1:05 AM