Chris Penner
The Personal blog and musings of Chris Penner, a designer, developer and future opsimath.
HaskellFunctional / PL theorySoftware / engineering practice
- Posts
- 66 from 19 May 2014 to 11 Nov 2025
- Posting
- now and then (1 in the last year)
- Kind
- personal blog
- Feed
- https://chrispenner.ca/atom.xml
2025 8
- Ditch your (mut)ex, you deserve better
- Exploring Arrows for sequencing effects
- Monads are too powerful: The Expressiveness Spectrum
- You should add debug views to your DB
- Save memory and CPU with an interning cache
- Using traversals to batch database queries
- Building Industrial Strength Software without Unit Tests
- 3 things other languages should steal from Unison
2024 1
2020 6
- Simpler and safer API design using GADTs
- Virtual Record Fields Using Lenses
- Composable filters using Witherable optics
- Silly job interview questions in Haskell
- Generalizing 'jq' and Traversal Systems using optics and standard monads
- Intro to Kaleidoscopes: Optics for aggregating data through Applicatives
2019 10
- Algebraic lenses
- Advent of Optics: Day 4
- Advent of Optics: Day 3
- Advent of Optics: Day 2
- Advent of Optics: Day 1
- Beating C with 80 lines of Haskell: wc
- Optics + Regex: Greater than the sum of their parts
- Slick 1.0 Release - Now with a quick and easy template!
- Haskell IDE Support (hie-core lsp Sept. 2019)
- Higher Kinded Option Parsing
2018 8
2017 9
- MonadIO Considered Harmful
- Type Tac Toe: Advanced Type Safety
- Conway's Game of Life using Representable and Comonads
- Radix Sort, Trie Trees, and Maps from Representable Functors
- Free and Forgetful Functors
- Adjunctions and Battleship
- Zippers using Representable and Cofree
- Shipping Haskell via Homebrew
- Kleisli Endomorphisms