Work in progress: 181,232 of 181,233 sites checked so far, more every week · updated 2 Nov 2026Missing a blog? Tell us

Top all-time · #5674

T

Tikhon Jelvis

Personal blog · jelv.is/blog · on HN as tikhonjprogramming

Tikhon Jelvis's personal blog at jelv.is covers programming. Since 2013, 14 different Hacker News readers have linked it 47 times, most often “Generating Mazes with Inductive Graphs”. It is still writing: the last post was on 2025-06-23, and you can follow it by feed.

Visit the blog
47mentions?
14HN people?
2013–2026first – last linked?
Links on Hacker News per year · peak 8 in 2013

Too few sampled comments (5) to say how often HN recommends it.?

Why HN links it

HN readers link Tikhon Jelvis's Haskell and functional programming posts, such as the maze-generation article using inductive graphs and the post on monads and purity. One commenter calls the graph article a nice, relatively informal introduction.

Summarised by Claude from a sample of 5 HN comments that link here. Each comment is marked recommending, critical or neutral (citing without judging); how this works.

The author on HN?

tikhonj · 16,918 karma · member since 2011

Tikhon Jelvis I am interested in programming languages, functional programming (especially Haskell), domain-specific languages, static analysis and program synthesis. I am working on apply programming language ideas to supply chain planning. I worked on supply chain optimization at Target for several years, and co-authored a textbook on reinforcement learning based on that experience. contact: http://jelv.is, tikhon@jelv.is

From their public HN profile, which links to this site.

Most-linked posts?

  1. Generating Mazes with Inductive Graphs
    4 people · 4 mentions · first linked 2014-04-16
  2. Lazy dynamic programming
    3 people · 3 mentions · first linked 2014-05-27
  3. Writing Code to Be Read at a Glance
    3 people · 3 mentions · first linked 2025-06-29
  4. Haskell, Monads and Purity
    2 people · 3 mentions · first linked 2014-10-04
  5. Generating Mazes with Inductive Graphs (2017)
    2 people · 2 mentions · first linked 2024-03-04

What Hacker News says?

  1. FGL is a great example of how to make a "nice" high-level graph interface suited for functional programming. I'm a big fan. But it's orders of magnitude too slow and memory-inefficient for performance-sensitive graph computations—if you have even moderately sized graphs and graph algorithms are a bottleneck, you'll need to use something else, and probably something domain-specific. Given the way the interface works,…

    Comment linking /blog/Generating-Mazes-with-Inductive-Graphs/

    on “The hunt for the missing data type”
  2. Submitted Haskell, Monads and Purity as a story · 141 points

    HN discussion
  3. Firefox's screen usage is easy to configure. Compare[1] my KDE-themed Firefox and Chrome, for example. [1]: http://jelv.is/browser-screen-usage.png Extensions require a restart to be installed, perhaps, but that doesn't seem to be a big issue: you only install any given extension once. If you want to install a bunch at the same time, you only need to restart once.

    Comment linking /browser-screen-usage.png

    on “Firefox fixes save gigabytes of memory on image-heavy pages”
  4. Submitted Generating Mazes with Inductive Graphs as a story · 72 points

    HN discussion
  5. I've been doing all my talk slides for the past few years with org-mode and Reveal.js. Really happy with both the workflow and the result[1]. I've settled on a pretty simple system with three main files: ideas.org → outline.org → slides.org I start with unstructured thoughts, turn them into a structure of a presentation and then into concrete slides, all in roughly the same format. With Emacs, it's easy to navigate…

    Comment linking /talks/haskell-love-2020/slides.html

    on “Reveal.js: HTML presentation framework”
  6. Submitted Generating Mazes with Inductive Graphs (2017) as a story · 20 points

    HN discussion
  7. A thunk is an unevaluated value. Better, it's an unevaluated piece of code that returns a value when it's required. For instance, you can write x = [1..] which gives you a list of all the positive integers. Because of laziness (which thunking enables), this line runs just fine. The compiler allocates a thunk for x, saying "okay, I know what x is now". But x is never fully evaluated (because we don't really have enou…

    Comment linking /blog/Lazy-Dynamic-Programming/

    on “Three Months of Go, from a Haskeller’s perspective (2016)”
  8. Submitted Lazy dynamic programming as a story · 5 points

    HN discussion
  9. Yes, although it's hard to make it scale in every case. What you're talking about sounds like the field of program synthesis[1], which uses SMT solvers (among other technologies) to generate code to some specification. I worked on a system[2] that used this sort of technique to optimize code for a weird architecture (GreenArrays' Forth-based chip[3]) and it was certainly much easier to implement than a classical opt…

    Comment linking /chlorophyll.pdf

    on “The Z3 Theorem Prover released under MIT license”
  10. Submitted By Looking as a story · 4 points

    HN discussion
  11. I'm not pavpanchekha, but I worked on a project[1] that used Z3 to optimize array-forth code without having to implement a classical optimizing compiler. We used Z3 to synthesize basic blocks of array-forth code against an executable specification which involves verifying that two programs have the same behavior and actually searching for programs against certain constraints. There is a whole field of research in pr…

    Comment linking /chlorophyll.pdf

    on “The Z3 Theorem Prover released under MIT license”
  12. Submitted Writing Code to Be Read at a Glance as a story · 3 points

    HN discussion
  13. Emacs can be pretty pretty--perhaps not actively pretty, but very elegant in a minimalist sort of way. I'm pretty happy with how mine looks[1], for example. [1]: http://jelv.is/emacs-blackboard.png Also, have you tried Evil? Apparently it's a very good Vim-emulation mode for Emacs, highly recommended over Viper.

    Comment linking /emacs-blackboard.png

    on “Just Use Sublime Text”
  14. Submitted Writing Code to Be Read at a Glance as a story · 3 points

    HN discussion
  15. I've made diagrams for my talks in both style (with code and with Inkscape or, these days, Lucidchart). Writing code to generate diagrams had a much larger setup cost but once I had it going, iterating on the diagrams became much easier. I had a talk about radix trees[1] where I wrote some Haskell code that could take trees and generate diagrams from them. Getting the code right in the first place took a few hours b…

    Comment linking /talks/lambda-world-2018/slides.html

    on “Create system diagrams with Go”
  16. Submitted Generating mazes with inductive graphs as a story · 3 points

    HN discussion
  17. His CV on his website http://jelv.is/resume.pdf . Seems he's fairly experienced. Anyway such things are highly subjective, and YMMV

    Comment linking /resume.pdf

    on “Too scared to write a line of code”
  18. Submitted Generating Mazes with Inductive Graphs as a story · 3 points

    HN discussion
  19. Emacs has its own version of powerline. You can turn off most of the annoying frills like the menu bar, the scroll bars, the toolbar and the fringe. You can also use a nice typeface (I'm very partial to Deja-vu Sans Mono) and a nice color scheme (I like blackboard). I think the final result looks rather good: http://jelv.is/emacs-blackboard.png and http://jelv.is/emacs-demo.png .

    Comment linking /emacs-demo.png

    on “How to Learn Emacs: A Hand-drawn One-pager for Beginners”
  20. Submitted Debugging Haskell Type Errors as a story · 2 points

    HN discussion
  21. This is a somewhat misleading way to think about Haskell and monads—it puts the cart in front of the horse and obscures both how Haskell deals with effects and how monads are more general and useful than just IO. This blog post ends up mystifying more rather than demystifying. Then again, this shouldn't be a surprise from an article that describes the Haskell ideas as "the Haskell monadic dogma"! You wouldn't expect…

    Comment linking /blog/Haskell-Monads-and-Purity/

    on “If monads are the solution, what is the problem?”
  22. Submitted Lazy Dynamic Programming as a story · 2 points

    HN discussion
  23. These reminds me of the Functional Graph Library[1] in Haskell, which takes similar ideas (edit: about constructing graphs inductively) a lot further. There is also an article by Tikhon Jelvis[2] that provides a nice and relatively informal introduction to using those ideas in practice. [1] http://hackage.haskell.org/package/fgl [2] http://jelv.is/blog/Generating-Mazes-with-Inductive-Graphs/

    Comment linking /blog/Generating-Mazes-with-Inductive-Graphs/

    on “An Algebra of Graphs”
  24. Submitted Generating Mazes with Inductive Graphs as a story · 2 points

    HN discussion
  25. I was working on a very similar project myself recently [1], heavily inspired by ydiff. Unfortunately, I didn't implement the tree diff algorithm entirely correctly, and it's been on hiatus for over a year :(. The one interesting addition my project had was merging. The neat trick was that we reused the same tree diff algorithm to find conflicts :P. With a bit of work, we would have some very neat features, includin…

    Comment linking /cow

    on “Ydiff: Structural Comparison of Programs”
  26. Submitted Writing Code to Be Read at a Glance as a story · 1 points

    HN discussion
  27. This is where functional reactive programming really shines. It lets you model time explicitly. You can easily work with streams of events, but you can also work with things that change continuously over time. With a standard callback/state-based approach, you end up implicitly modelling time through mutable state. This has a few major disadvantages: it's difficult to talk about history and time is distinctly second…

    Comment linking /frp

    on “A Worst Case for Functional Programming?”
  28. Submitted Writing Code to Be Read at a Glance as a story · 1 points

    HN discussion
  29. The reason that the Monad structure is interesting, in my view, is that it's simple and neatly captures the notion of a "computation" that we can compose in different ways. The core useful operator for monads in Haskell is >>=. It has the following type: m a -> (a -> m b) -> m b If you squint, this is like function application with a few extra m's thrown in. Here's normal function application for comparison: a -> (a…

    Comment linking /blog/Haskell-Monads-and-Purity

    on “Functors, Applicatives, and Monads in Pictures (2013)”
  30. Submitted Letting Experts Be Experts as a story · 1 points

    HN discussion

Search all of HN for jelv.is

Linked by the same people?