Haskell for all
- 2026-09-02: Dependent if expressions without dependent types
- 2026-07-07: Mechanized type inference for record concatenation
- 2026-06-23: Record type inference for dummies
- 2026-06-06: Ergonomic overrides for Nixpkgs
- 2026-05-19: Type out the code
- 2026-05-05: A bidirectional typechecking puzzle
- 2026-03-17: A sufficiently detailed spec is code
- 2026-02-16: Browse code by meaning
- 2026-02-07: Beyond agentic coding
- 2026-02-02: My experience with vibe coding
- 2026-01-20: Type-safe eval in Grace
- 2026-01-14: Chat is the least interesting interface to LLMs
- 2026-01-09: Prompting 101: Show, don’t tell
- 2025-10-01: Nix Steering Committee vote of no confidence
- 2025-09-17: Steering Committee Retrospective
- 2025-08-13: Datatype unification using Monoids
- 2025-05-02: Prompt chaining reimagined with type inference
- 2024-11-14: The Haskell inlining and specialization FAQ
- 2024-08-29: Firewall rules: not as secure as you think
- 2024-07-23: Software engineers are not (and should not be) technicians
- 2024-07-03: Quality and productivity are not necessarily mutually exclusive
- 2024-06-25: My spiciest take on tech hiring
- 2024-05-20: Prefer do notation over Applicative operators when assembling records
- 2024-05-08: All error messages are necessarily bad to some degree
- 2024-02-29: The siren song of domain-specific languages
- 2024-02-22: Unification-free ("keyword") type checking
- 2023-10-04: A GHC plugin for OpenTelemetry build metrics
- 2023-10-02: My views on NeoHaskell
- 2023-09-08: GHC plugin for HLint
- 2023-04-03: Ergonomic newtypes for Haskell strings and numbers
- 2023-03-06: The "open source native" principle for software design
- 2023-01-30: terraform-nixos-ng: Modern terraform support for NixOS
- 2023-01-23: Announcing nixos-rebuild: a "new" deployment tool for NixOS
- 2022-12-30: Nixpkgs support for Linux builders running on macOS
- 2022-12-19: Nixpkgs support for incremental Haskell builds
- 2022-10-24: How to correctly cache build-time dependencies using Nix
- 2022-10-20: What does "isomorphic" mean (in Haskell)
- 2022-09-07: nix-serve-ng: A faster, more reliable, drop-in replacement for nix-serve
- 2022-08-29: Stop calling everything "Nix"
- 2022-08-28: Incrementally package a Haskell program using Nix
- 2022-06-26: defaultable-map: An Applicative wrapper for Maps
- 2022-06-03: The appeal of bidirectional type-checking
- 2022-05-31: Generate web forms from pure functions
- 2022-05-09: The golden rule of software distributions
- 2022-05-03: Why does Haskell's take function accept insufficient elements?
- 2022-05-01: Introductory resources to type theory for language implementers
- 2022-03-29: Modeling PlusCal in Haskell using Cartesian products of NFAs
- 2022-03-12: The hard part of type-checking Nix
- 2022-03-02: Applicatives should usually implement Semigroup and Monoid
- 2022-02-27: What is a monad morphism (in Haskell)?
- 2022-01-26: Nixpkgs overlays are monoids
- 2021-12-13: Funding isn't the problem with open source
- 2021-10-21: Co-Applicative programming style
- 2021-10-14: Advice for aspiring bloggers
- 2021-10-06: The "return a command" trick
- 2021-09-29: Fall-from-Grace: A ready-to-fork functional programming language
- 2021-09-09: Optics are monoids
- 2021-09-01: Forward and reverse proxies explained
- 2021-08-27: Naming function arguments in Dhall
- 2021-08-13: Namespaced De Bruijn indices
- 2021-06-04: Probability for Slay the Spire fanatics
- 2021-05-19: Module organization guidelines for Haskell projects
- 2021-05-05: The trick to avoid deeply-nested error-handling code
- 2021-04-21: The end of history for programming
- 2021-04-08: How to replace Proxy with AllowAmbiguousTypes
- 2021-02-06: Folds are constructor substitution
- 2021-01-31: Dynamic type errors lack relevance
- 2021-01-04: The visitor pattern is essentially the same thing as Church encoding
- 2020-12-04: Recruiting for diversity is not lowering the bar
- 2020-11-19: How to use NixOS for lightweight integration tests
- 2020-11-10: Pretty-print syntax trees with this one simple trick
- 2020-10-30: Why I prefer functional programming
- 2020-07-27: The golden rule of software quality
- 2020-07-13: Record constructors
- 2020-04-21: Blazing fast Fibonacci numbers using Monoids
- 2020-02-10: Dhall Survey Results (2019-2020)
- 2020-01-17: Why Dhall advertises the absence of Turing-completeness
- 2020-01-05: Dhall - Year in review (2019-2020)
- 2019-12-12: Prefer to use fail for IO exceptions
- 2019-06-16: The CAP theorem for software engineering
- 2019-05-14: Release early and often
- 2019-02-21: Dhall Survey Results (2018-2019)
- 2019-02-11: Haskell command-line utility using GHC generics
- 2019-01-16: Dhall - Year in review (2018-2019)
- 2018-10-08: Detailed walkthrough for a beginner Haskell program
- 2018-08-16: NixOS in production
- 2018-05-21: How I evaluate Haskell packages
- 2018-02-05: The wizard monoid
- 2018-01-28: Dhall Survey Results (2017-2018)
- 2018-01-02: Dhall - Year in review (2017-2018)
- 2017-11-27: Compare Nix derivations using nix-diff
- 2017-11-03: Semantic integrity checks are the next generation of semantic versioning
- 2017-10-16: Advice for Haskell beginners
- 2017-10-07: Why do our programs need to read input and write output?
- 2017-09-26: Type-driven strictness
- 2017-07-16: Demystifying Haskell assignment
- 2017-06-17: Dhall is now a template engine
- 2017-06-10: Translating a C++ parser to Haskell
- 2017-04-13: Use Dhall to configure Bash programs
- 2017-02-20: The Curry-Howard correspondence between programs and proofs
- 2017-02-05: Program JSON and YAML with Dhall
- 2017-01-28: Typed Nix programming using Dhall
- 2016-12-05: Dhall - A non-Turing-complete configuration language
- 2016-10-27: Electoral vote distributions are Monoids
- 2016-07-04: Auto-generate service API endpoints from records
- 2016-07-03: list-transformer - A beginner-friendly ListT
- 2016-05-21: A command-line benchmark tool
- 2016-04-24: Data is Code
- 2016-04-10: Worst practices should be hard
- 2016-04-03: LambdaConf should reconsider its policy
- 2016-02-27: Auto-generate a command line interface from a data type
- 2016-02-21: State of the Haskell Ecosystem - February 2016 Edition
- 2016-02-03: From mathematics to map-reduce
- 2015-12-30: Compile-time memory safety using Liquid Haskell
- 2015-12-09: How to contribute to the Haskell ecosystem
- 2015-11-18: Interactive and composable charts
- 2015-11-11: Haskell-native spreadsheets
- 2015-10-18: Explicit is better than implicit
- 2015-10-07: Basic Haskell Examples
- 2015-10-02: Polymorphism for dummies
- 2015-09-17: How to make your Haskell code more readable to non-Haskell programmers
- 2015-08-31: State of the Haskell ecosystem - August 2015
- 2015-06-15: break-1.0.0: A small library for breaking from loops
- 2015-06-15: optional-args-1.0.0: Optional function arguments
- 2015-05-18: The internet of code
- 2015-05-06: Haskell content spinner
- 2015-04-06: Mathematical APIs
- 2015-03-27: Algebraic side effects
- 2015-01-29: Use Haskell for shell scripting
- 2015-01-10: total-1.0.0: Exhaustive pattern matching using traversals, prisms, and lenses
- 2014-12-06: A very general API for relational joins
- 2014-11-23: How to build library-agnostic streaming sources
- 2014-10-26: How to desugar Haskell code
- 2014-09-12: Morte: an intermediate language for super-optimizing functional programs
- 2014-08-10: managed-1.0.0: A monad for managed resources
- 2014-07-20: Equational reasoning at scale
- 2014-06-14: Spreadsheet-like programming in Haskell
- 2014-04-25: Model-view-controller, Haskell-style
- 2014-04-19: How the continuation monad works
- 2014-04-04: Scalable program architectures
- 2014-04-01: Worst practices are viral for the wrong reasons
- 2014-03-25: Introductions to advanced Haskell topics
- 2014-03-03: How to model handles with pipes
- 2014-02-22: Reasoning about stream programming
- 2014-02-08: pipes-http-1.0: Streaming HTTP/HTTPS clients
- 2014-02-05: pipes-parse-3.0: Lens-based parsing
- 2014-02-02: Streaming logging
- 2014-01-19: Shortcut fusion for pipes
- 2013-12-25: Equational reasoning
- 2013-12-19: Lift error handling with lens-like syntax
- 2013-11-01: Test stream programming using Haskell's `QuickCheck`
- 2013-10-12: An all-atom protein search engine powered by Haskell
- 2013-10-09: How to reimplement the conduit parsing API in 50 lines of pipes code
- 2013-10-06: Manual proofs for the `pipes` laws
- 2013-09-20: Perfect streaming using `pipes-bytestring`
- 2013-09-07: pipes-4.0: Simpler types and API
- 2013-08-10: foldl-1.0.0: Composable, streaming, and efficient left folds
- 2013-08-03: Composable streaming folds
- 2013-08-02: Sometimes less is more in language design
- 2013-07-13: Statements vs Expressions
- 2013-06-28: The Resource Monad
- 2013-06-23: From zero to cooperative threads in 33 lines of Haskell code
- 2013-06-06: pipes-concurrency-1.2.0: Behaviors and broadcasts
- 2013-06-02: pipes-parse-1.0.0: Pushback, delimited parsers, resumable parsing, and lenses
- 2013-05-06: pipes-3.3.0: Folds and uniting ListT with Proxy
- 2013-05-04: Program imperatively using Haskell lenses
- 2013-04-21: pipes and io-streams
- 2013-04-14: pipes-concurrency-1.0.0: Reactive programming
- 2013-04-10: Defaults
- 2013-03-21: pipes-3.2: ListT, Codensity, ArrowChoice, and performance
- 2013-03-16: mmorph-1.0.0: Monad morphisms
- 2013-02-14: Comonads are objects
- 2013-01-21: Introduction to Haskell IO
- 2013-01-14: pipes-safe-1.0 - Resource management and exception handling for pipes
- 2012-12-30: The Continuation Monad
- 2012-12-12: pipes-3.0 - A simpler, unified API
- 2012-10-31: pipes-2.5: Faster and slimmer
- 2012-10-20: "Hello, core!"
- 2012-10-15: Parsing chemical substructures
- 2012-10-06: pipes-2.4: Proxy transformers, extra categories, utilities, and benchmarks
- 2012-09-19: The MonadTrans class is missing a method
- 2012-09-15: The functor design pattern
- 2012-09-07: Concurrency = Lists of Kleisli arrows
- 2012-09-05: pipes-2.3 - Bidirectional pipes
- 2012-08-18: The category design pattern
- 2012-08-10: Code Example #1
- 2012-07-31: Free monad transformers
- 2012-07-19: First-class modules without defaults
- 2012-07-18: Purify code using free monads
- 2012-07-11: Breaking from a loop
- 2012-07-08: errors-1.0: Simplified error handling
- 2012-07-01: pipes-2.1 and index-core-1.0 - Indexed types
- 2012-06-16: GADTs
- 2012-06-09: Why free monads matter
- 2012-05-27: Conduit bugs
- 2012-05-21: pipes 2.0 - Pipe Finalization
- 2012-05-02: Scrap your type classes
- 2012-03-29: Haskell for Purists - Pipe Finalization
- 2012-02-11: Haskell for Java Programmers - Serialization
- 2012-01-29: Haskell for Engineers - Unicode
- 2012-01-28: Lenses
- 2012-01-04: Haskell for Mainstream Programmers - State
- 2012-01-03: Haskell for Intermediate Programmers - Algebraic Data Types
- 2012-01-01: Haskell for C Programmers - For Loops
- 2011-12-31: Haskell for Mainstream Programmers - Code reuse
End of feed.