The Curious Engineer

All blogs / Haskell

The Comonad Reader

comonad.com/reader

Writing, talks, live coding, and papers: types, (co)monads, substructural logic

HaskellFunctional / PL theoryMathPerformance / optimization

Posts
233 from 9 Apr 1999 to 6 Oct 2026
Posting
weekly (26 in the last year)
Kind
personal blog
Feed
https://comonad.com/feed.xml

2026 26

  1. Stretching the Storage Manager on the JVM
  2. October archive →
  3. Turbo Haskell
  4. A Parsec Full of Rats
  5. Applicatives
  6. Cache-Oblivious Data Structures
  7. Cellular Automata
  8. Editorials
  9. Fibonacci
  10. Free Constructions in Haskell
  11. Free Monads for Less
  12. Generalized Hylomorphisms and Chronomorphisms
  13. Guanxi: Logic Programming in Haskell
  14. Harmless Algorithms
  15. Kan Extensions
  16. Live Coding
  17. Monads from Comonads
  18. Moore Machines
  19. Power Series of Functors
  20. Recursion Schemes
  21. Revisiting Matrix Multiplication
  22. Snippets
  23. What Constraints Entail
  24. Zipping and Cozipping
  25. Explore all series →
  26. September archive →

2023 1

  1. Live Coding — Session 26

2022 3

  1. Internalized Guarded Recursion for Equational Reasoning
  2. Across the Kmettverse
  3. The current state of the Haskell Foundation

2021 2

  1. Programming with Tactics
  2. A Taste of Linear Optics

2020 1

  1. Cadenza: Building Fast Functional Languages Fast

2019 5

  1. Guanxi: Logic Programming in Haskell — Part 4 of 4
  2. Guanxi: Logic Programming in Haskell — Part 3 of 4
  3. Guanxi: Logic Programming in Haskell — Part 2 of 4
  4. Guanxi: Logic Programming in Haskell — Part 1 of 4
  5. Live Coding — Session 25: Guanxi Review

2018 34

  1. Live Coding — Session 24: Dancing with Decision Diagrams
  2. Live Coding — Session 23: Dancing Links, Part 2
  3. Live Coding — Session 22: Dancing Links
  4. Live Coding — Session 21: Relational Programming, Part 6
  5. Live Coding — Session 20: Relational Programming, Part 5
  6. Live Coding — Session 19: Relational Programming, Part 4 (Soul of a New Machine)
  7. Live Coding — Session 17: Relational Programming, Part 3
  8. Live Coding — Session 18: Nominal Sets
  9. Live Coding — Session 16: Relational Programming, Part 2
  10. Live Coding — Session 15: Back from ICFP
  11. There and Back Again: Regular and Inverse Semigroups
  12. Live Coding — Session 14.3: Succinct Serialization, Part 6
  13. Live Coding — Session 14.2: Succinct Serialization, Part 6
  14. Live Coding — Session 14.1: Succinct Serialization, Part 6
  15. Live Coding — Session 13: Succinct Serialization, Part 5
  16. Live Coding — Session 12: Succinct Serialization, Part 4
  17. Live Coding — Session 11: Succinct Serialization, Part 3
  18. Live Coding — Session 10: Succinct Serialization, Part 2
  19. Live Coding — Session 9: Succinct Serialization, Part 1
  20. Live Coding — Session 7: More Machines
  21. Live Coding — Session 8: Succinct Data Structures and Dynamization
  22. Live Coding — Session 6: CEK Machines
  23. Live Coding — Session 5.2: Propagators
  24. Live Coding — Session 5.1: Propagators
  25. Live Coding — Session 4.2: Q&A
  26. Live Coding — Session 4.1: Regular and Inverse Semigroups
  27. Live Coding — Session 3: Authenticated Computation
  28. Combinators Revisited
  29. Combinators Revisited
  30. Live Coding — Session 2.2: Q&A
  31. Live Coding — Session 2.1: Q&A
  32. Live Coding — Session 1: Commutativity
  33. Computational Quadrinitarianism (Curious Correspondences go Cubical)
  34. The State Comonad

2017 7

  1. A Walk-through of Computational Reflection in Coq
  2. Monoidal Parsing
  3. Algebraic Databases
  4. Introduction to Cryptocurrencies in Haskell
  5. SMT for DSLs: a Tutorial
  6. Efficiently coding for modern CPUs
  7. Cracking Multi-Language Transformations

2016 14

  1. VR: Test Framework
  2. Monad Transformer Lenses
  3. Monad Homomorphisms
  4. First-class implementations
  5. binary-serialize-cbor
  6. Probabilistic Programming Live-code
  7. Composing (Music) in Haskell
  8. Haskell, Startups, and Domain Specific Languages
  9. Haskell Code Review!
  10. Undecidable Superclasses
  11. Dimensional
  12. On Reflex
  13. Adjoint Triples
  14. Desugaring Haskell’s do-Notation into Applicative Operations

2015 25

  1. Bound
  2. Propagators
  3. Servant
  4. csound-expression
  5. Fibonacci — Part 2: Open-Ended Fibonacci Search
  6. Some Rough Notes on Univalent Foundations and B-Systems, Part I
  7. On-line Lowest Common Ancestor
  8. Unlifted Structures
  9. On the unsafety of interleaved I/O
  10. Discrimination is Wrong: Improving Productivity
  11. Moore for Less
  12. Functionally Oblivious (and Succinct)
  13. Categories of Structures in Haskell
  14. Skete: Exploring Distributed Package Management
  15. How to Replace Failure by a Heap of Successes
  16. Domains, Sets, Traversals and Applicatives
  17. Fibonacci — Part 1: Leonardo Random Access Lists
  18. Making Dependent Types Practical
  19. Reflex: Practical Functional Reactive Programming
  20. Framing the Discussion with EDSLs
  21. Free Monoids in Haskell
  22. Enigmatic Haskell, Haskellish Enigma
  23. Pure Type Systems
  24. The free theorem for fmap
  25. Type Classes vs. the World

2014 14

  1. Fast Circular Substitution
  2. Liquid Haskell
  3. Revisiting Matrix Multiplication — Part V: Heaps of Performance
  4. Quine: Shader Toys
  5. Getting a Quick Fix of Comonads
  6. Youtube 8n5ubDe9FAA
  7. Letter to a Young Haskell Enthusiast
  8. On Hask
  9. CUFP 2014 Call For Presentations
  10. A Functorial Query Language
  11. A Quick Introduction To Haskell
  12. Catamorphisms
  13. Lightning talks - Dec. 2014
  14. Stop Treading Water: Learning to Learn

2013 22

  1. PHOAS For Free
  2. Cache-Oblivious Data Structures — Part I: Deamortized ST
  3. Procrustean Mathematics
  4. Cache-Oblivious Maps
  5. Functional Reporting
  6. Cellular Automata — Part III: A World in a Bottle
  7. Conquering Folds
  8. Parallel and Incremental CRCs
  9. Snippets once
  10. Mandelbrot
  11. Cellular Automata — Part II: PNGs and Moore
  12. Episode 1 — On Lenses
  13. Revisiting Matrix Multiplication — Part VI: A Most Significant Comparison
  14. Revisiting Matrix Multiplication — Part IV: IntMap!?
  15. Revisiting Matrix Multiplication — Part III: Extending Vector
  16. Revisiting Matrix Multiplication — Part II: The Zen of Z-Ordering
  17. Revisiting Matrix Multiplication — Part I: Bit Shuffling with Lenses and Isomorphisms
  18. Cellular Automata — Part I: From Theory to Pretty Pictures
  19. Representing Applicatives
  20. Japanese “ekmett” Workshop (Part 1 of 2)
  21. Algebras of Applicatives
  22. The Ermine programming language

2012 11

  1. Abstracting with Applicatives
  2. Lenses, Folds and Traversals
  3. Natural Deduction, Sequent Calculus and Type Classes
  4. Unnatural Transformations and Quantifiers
  5. Working around Hackage Outages
  6. Making de Bruijn Succ Less
  7. Mirrored Lenses
  8. Where’s Waldo?
  9. Purely Functional Data Structures for On-Line LCA
  10. Catamorphism Knol
  11. Wadler’s Law Revisited

2011 16

  1. Searching Infinity Parametrically
  2. What Constraints Entail: Part 2
  3. What Constraints Entail: Part 1
  4. Homotopy and Directed Type Theory Slides
  5. Hac Boston!
  6. A Parsec Full of Rats, Part 2
  7. A Parsec Full of Rats, Part 1
  8. Free Modules and Functional Linear Functionals
  9. A Product of an Imperfect Union
  10. More on Comonads as Monad Transformers
  11. Monad Transformers from Comonads
  12. Monads from Comonads
  13. Free Monads for Less (Part 3 of 3): Yielding IO
  14. Free Monads for Less (Part 2 of 3): Yoneda
  15. Free Monads for Less (Part 1 of 3): Codensity
  16. Lenses: A Functional Imperative

2010 6

  1. Introducing Speculation
  2. Boston Haskell June
  3. Hac Phi
  4. Brodal-Okasaki Heaps in Haskell
  5. Reverse-Mode Automatic Differentiation in Haskell
  6. Finger Trees

2009 8

  1. Iteratees, Parsec, and Monoids, Oh My!
  2. Remodeling Precision
  3. Curried Scheme
  4. Iteratees, Parsec and Monoids (Slides)
  5. Clearer Reflections
  6. Slides from Hac Phi: “All About Monoids”
  7. Recursion Schemes: A Field Guide (Redux)
  8. Reflecting On Incremental Folds

2008 25

  1. The Pointed-Set Comonad
  2. Still Alive
  3. Representing Adjunctions
  4. Zapping Adjunctions
  5. Linear Bloom Filters
  6. Kan Extensions III: As Ends and Coends
  7. Kan Extensions II: Adjunctions, Composition, Lifting
  8. Kan Extensions
  9. Elgot (Co)Algebras
  10. Forgetful Laziness
  11. Generatingfunctorology
  12. Towards Formal Power Series for Functors
  13. Just Fokkinga Abide
  14. Cozipping
  15. Zipping and Unzipping Functors
  16. Deriving Strength from Laziness
  17. The Cofree Comonad and the Expression Problem
  18. Dynamorphisms as Chronomorphisms
  19. Time for Chronomorphisms
  20. Unnatural Transformations
  21. Generalized Hylomorphisms
  22. Monads for Free
  23. Higher-Order Abstract Syntax à la Carte
  24. Rotten Bananas
  25. Elgot Algebras

2007 3

  1. Parameterized Monads in Haskell
  2. Updated Data.Type.*
  3. Javascript Interpreter, Recompiler, Atomizer, Threading Library…

2006 5

  1. ##logic
  2. Generalizing (.)
  3. Overloaded Functions with Subtyping
  4. WikiPress
  5. Hello, World!

2001 1

  1. Harmless Algorithms — Part 4: A Hybrid Approach to Visibility

2000 1

  1. Harmless Algorithms — Part 3: Design Patterns And 3D Gaming

1999 2

  1. Harmless Algorithms — Part 2: Scene Traversal Algorithms
  2. Harmless Algorithms — Part 1: Fine Occlusion Culling Algorithms

Undated 1

  1. Wavelets in 3D Graphics