Bluefin articles
- Bluefin resources
- Plucking constraints in Bluefin
- Bluefin prevents handles leaking
- Bluefin streams finalize promptly
- Bluefin versus OOP
- Bluefin is a capability system
Haskell articles
- Haskell’s missing mutable reference type
- A reference implementation of IOScopedRef
- Fork-fragile reader-like operations in Haskell
- Nested strict data in Haskell
- Haskell’s Data.Map.Strict.Map is not a strict map
- An impure lazy programming language
- Make invalid laziness unrepresentable
- foldl traverses with State, foldr traverses with anything
- Scrap your iteration combinators
- Upgrading from GHC 8.10 to GHC 9.6
- Opaleye’s API breakage policy
- Demystifying DList
- exitFailure doesn’t exit
- Good design and type safety in Yahtzee
- Using our brain less in refactoring Yahtzee
- Domain errors with HasCallStack
- Improving the typed-process documentation
- The Mysterious Incomposability of Decidable
Programming articles
Maths and physics articles
- Bell’s theorem made simpler
- Symbolic expressions can be Automatically differentiated too
- Why is naive symbolic differentiation slow?
- Automatic differentiation: source-to-source worked examples
- Automatic differentiation: the maths
- Is a vector space naturally isomorphic to its dual?
All articles
- A perspective on higher Haskell
- Accidentally exponential in a compiler
- AI doom posterity
- Alternatives convert products to sums
- API design
- Article forthcoming
- Attribute Grammar
- Automatic differentiation: the maths
- Automatic differentiation: source-to-source worked examples
- Backups
- Behaviour changes on flag day
- Bell’s theorem made simpler
- Bluefin resources
- Bluefin is a capability system
- Plucking constraints in Bluefin
- Bluefin prevents handles leaking
- Bluefin streams finalize promptly
- Bluefin versus OOP
- Bret Victor talks
- Fred Brookes on types
- Comments
- How to complain about a programming language
- Dante for dummies
- Haskell’s Data.Map.Strict.Map is not a strict map
- Programming as if the Correct Data Structure (and Performance) Mattered
- Decentralised issue trackers
- Demystifying DList
- Dimensions of functional programming
- Some notes about Dominic Cummings
- DSL
- Why does Haskell not have an exists keyword?
- exitFailure doesn’t exit
- Exploratory programming
- Extended set theory
- extensible-effects, monad transformers and interleaving effects
- Further examples for extensible-effects
- Why Flexport’s CEO is wrong about the bottleneck at California’s ports
- Folding
- foldl traverses with State, foldr traverses with anything
- Fork-fragile reader-like operations in Haskell
- Things I observe in forum comments
- Functional looping
- Upgrading from GHC 8.10 to GHC 9.6
- Better display for git rebase conflicts
- Resolving git rebase conflicts
- A Git survival guide
- Gnucash
- Good design and type safety in Yahtzee
- Greenspun’s tenth rule of mathematical logic
- What is harder with static types?
- Domain errors with HasCallStack
- Correcting Haskell myths
- Haskell programs: how do they run?
- Haskellers against partial functions
- Haskell’s missing mutable reference type
- Help wanted – Haskell projects I am willing to pay for
- The HKD pattern and type-level SKI
- How I play video on Linux
- how-i-use-baba-is-you
- How I use Beelink
- How I use cabal
- How I use dante
- How I use Debian GNU/Linux on Dell XPS 13 7390
- How I use emacs
- How I use Firefox
- How I (don’t) use the GHCi debugger
- How I use Gnucash
- How I use HLS and Emacs LSP mode
- How I use HP Deskjet 1050A on Debian GNU/Linux
- How I use Insurgency on Debian
- How I use less
- How I use cryptsetup and LUKS
- How I use MacOS
- How I use niceness
- How I use Steam Proton on Debian
- How I use tmp-postgres
- How I use tunefs
- how-i-use-ulimit
- How I use the Varmilo VA88M
- How I use my webcam to take still photos
- How I use Windows
- How to write profunctor lenses
- Improving the typed-process documentation
- An impure lazy programming language
- An IO transformer
- A reference implementation of IOScopedRef
- Lazy Map
- Learning Monads
- ListT done wrong
- Make invalid laziness unrepresentable
- Making Haskell popular
- The Model-View false dichotomy
- Faking modules in Haskell via implicit parameters
- MTL style for free
- Multiset semantics
- The Mysterious Incomposability of Decidable
- Nested strict data in Haskell
- Next Haskell
- OO maps to the real world, imperative maps to the machine
- Critique of OOP
- Opaleye’s API breakage policy
- Pessimissivism
- Peter principle
- Polymorphic recursion combinator in Haskell
- Polymorphism is not set theoretic
- Polymorphism
- Postgres weirdness
- Prefer composition to application
- ProductProfunctor folds
- Pronouncing abbreviations
- Properties and Structure
- Python madness
- Refactoring a neural network implementation in Haskell
- References for epistemic logic
- References for linear logic
- References for Non-Violent Communication
- References for parametricity
- References for quantum mechanics
- Reproducible tar
- Reverse mode Automatic Differentiation
- Scala continuations
- Scrap all your type classes but one
- Scrap your iteration combinators
- Scrap your lazy lists
- Scrap your type class instance bodies
- seq
- The Set/Bag Irrelevance
- Simplifying typeclasses
- Space leaks in the real world
- Streaming
- Strict Haskell
- Reflecting strictness in Haskell types
- Sugar considered harmful
- Summation
- Symbolic expressions can be Automatically differentiated too
- Thought terminating cliches in software
- tilapia
- Interesting posts by tomejaguar on Reddit
- Understanding Bound
- Unhelpful GHC error messages
- The Unreasonable Programmer
- Using our brain less in refactoring Yahtzee
- Is a vector space naturally isomorphic to its dual?
- Was bound but now I’m free
- What I don’t like about Emacs
- What I want from emacs
- Why do we like lazy lists?
- Why is naive symbolic differentiation slow?
- Why do we like laziness?
- Stuff I wish that Python had
- Works of art