Read my blog

Most of my posts are here now: There is also an email newsletter:

If you want to hire me

The best way to hire me is by hiring Monadfix services. I’m also open to other opportunities – I would love to try my hand at sales, marketing, and product development. Here is my LinkedIn profile.

Very old posts

Click here

lens over tea

A series of articles (called “lens over tea”) about lens and its implementation.

  • part 1 – lenses 101, traversals 101, a bit of implementation details (also lens operators, functor composition, Const, Identity, difference lists, monoids of endomorphisms under composition, default signatures for class methods, equality constraints, and irrefutable patterns).

  • part 2 – composition, laws, getters/actions/setters (also history of lenses, categories, the way to write lenses which would compose “normally”, some links to Reader/Writer/State learning materials, Void).

  • part 3 – folds (also Foldable, Apply, a nice trick for combining folds, and Fold1).

  • part 4 – isomorphisms, some profunctors, lens families (also Forget, Tagged, Proxy, a bit about pure profunctor lenses, existential types, algebra of types, and a cat video).

  • part 5 – prisms (also a recap of isomorphisms with diagrams, a bit about affine traversals, Pointed, and coerce).

  • part 6 – Template Haskell, aka “write your own makeLenses

It’s a work in progress; the future parts will mention:

  • indexed things
  • Bazaar/Magma/Molten/Mafic, traversal stuff like partsOf, taking
  • fusing and confusing
  • benchmarks (view _1 vs fst? how much does fusing help? etc)
  • vertical composition, link
  • ala, AlongsideLeft
  • upon, link
  • pure profunctor lenses and traversals, link 1, link 2, link 3, link 4, symmetric lenses ((g a -> f b) -> g s -> f t), link
  • Control.Lens.Plated, Control.Lens.Level, Control.Lens.Zoom

Other Haskell stuff


Several years ago I’ve been learning Racket and making notes (which then became somewhat popular):