Alexander Konovalov


This is the first a number of portraits and interviews with various speakers of LambdaConf.

I recently had the chance to talk with Alexander Konovalov about his path being a functional programmer and the topics of his presentations. Alexander loves abstraction, yet he is anything but myopic. He likes to explore systems and perceive abstractions coming from the micro or which extend to the macro. His background in Math and Science informs his speech with glowing enthusiasm concerning software, but often finds its way to Epistemology and Logic. For those attending LambdaConf, he is an asset for all who aspire to the summits of functional programming and wish to examine the life of code.

It all began with a childhood PC and an accidental discovery of a dusty old book on Pascal in his parents’ book case. Soon after he was reverse-engineering software, writing small x86 assembly pieces, and making bots for online games. This gave him a lot of insight into low-level hardware architecture, and served as a catalyst for his future software aspirations.

His undergraduate degree was in physics, but afterward he pursued CS for his masters degree when he realized that software was his true passion. On the path to functional programming, two events really stuck out. Alexander attended an informatics competition where he noticed that many people there were good problem solvers, but they couldn’t see the larger picture: “they knew everything about nothing.” Another important milestone was reading Seven Languages In Seven Weeks, and learning a lot about non-imperative paradigms of software development. He first learned Haskell, but it was Scala that he really took to (this was when Haskel had more build problems).

I asked “what should a new functional programmer be studying?” Here are a few of his responses:

“To learn more about functors & monads, implement as many different monad instances as you can: Option, List, State, Reader, Writer, Identity, Cont (the continuation monad). Learn about monadic parsing and parser combinators, implement them by hand.”

“To level up in type theory, challenge yourself and learn about Yoneda Lemma, Identity of indiscernibles, propositional equality. Learn dependently typed languages and read the first chapter of the HoTT book.”

Learn new ideas rather than new technologies.

Learn something you shall enjoy.

Finally, we talked about why one should come to Alexander’s presentations:

Isomorphic Reasoning: Counting with Types

Learn the basics of type algebra and isomorphismic reasoning.

Learn how to rigorously count type inhabitants.

Explore different ways of thinking about types through different isomorphic representations.

How to not get stuck in one way of thinking

Is there a way to prove that there is one inhabitant in ∀ a. a → a?

Recursion: schemes, algebras, finally tagless, data. A unifying vision

Learn the basics of type algebra and isomorphismic reasoning.

Explore how folds on recursive data structures can be expressed in different forms using isomorphic reasoning.

Learn how recursive algebraic data types, pattern functors, algebras, and typeclasses are all connected.

Learn the connection between free monads, MTL, and final tagless.

Practical Observable Sharing

Learn to solve two simple problems:

1: Given a parser written using finally tagless applicative parser combinators, produce an EBNF grammar and check if a particular non-terminal is nullable.

2: Given an expression in logical circuit DSL, simplify it and produce a final circuit schematic.

Learn to solve these problems in a referentially transparent way using reference equality guarded by the IO monad.

Expand your understanding of the Recursive typeclass and its potential applications.