Joachim Breitner
joachim-breitner.de · Personal blog · on HN since 2008
Joachim Breitner, a Haskell developer, writes about GHC, formal proofs, and small programming and hardware experiments.
What HN saysHN commenters link it for background on bootstrapping GHC and for his practical posts on vector screenshots and tools like arbtt.
42HN people shared it
13linked it in comments
45stories submitted
799story points
1 year agolast shared
2008people per year2026
Most-shared posts
- 1The Incredible Proof Machine4 people · 19 points · first shared 2015 · discussion on HN
- 2Thoughts on Bootstrapping GHC (2018)3 people · 68 points · first shared 2018 · 11 comments on HN
- 3Finding bugs in Haskell code by proving it2 people · 213 points · first shared 2017 · 44 comments on HN
- 4Screenshots using vector graphics (gtk3 apps only)2 people · 89 points · first shared 2011 · 22 comments on HN
- 5Pure recursively defined sets without looping in Haskell2 people · 38 points · first shared 2022 · 8 comments on HN
- 6Veggies: Haskell code generation from scratch2 people · 5 points · first shared 2017 · discussion on HN
- 7Pro-Charity Consulting2 people · 2 points · first shared 2023 · discussion on HN
- 8Using my Kobo eBook reader as an external eInk monitor2 people · 2 points · first shared 2014 · discussion on HN
- 9More Thoughts on a Bootstrappable GHC (Haskell)2 people · 1 points · first shared 2023 · discussion on HN
- 10Don’t Think, Just Defunctionalize1 people · 118 points · first shared 2020 · 45 comments on HN
- 11Sliding Right into Information Theory1 people · 83 points · first shared 2018 · 8 comments on HN
- 12GHC Steering Committee Retrospective1 people · 75 points · first shared 2024 · 4 comments on HN
- 13My contribution to XKCD’s #9491 people · 29 points · first shared 2013 · 55 comments on HN
- 14The Automatic Rule-Based Time Tracker1 people · 27 points · first shared 2009 · 4 comments on HN
- 15The magic “Just do it” type class1 people · 3 points · first shared 2018 · discussion on HN
What HN people wrote when they linked it
whateveracct · 2020-11-18
For Haskell, the libgmp stuff is being solved in GHC 9.0
https://iohk.io/en/blog/posts/2020/07/28/improving-haskells-big-number…
It is true that getting static Linux builds is nontrivial - but definitely doable [1]! But the demand is there so I'm guessing the elbow grease will follow in the coming few years :)
[1] https://www.joachim-breitner.de/blog/776-Distributing_Haskell_programs…
nomeata · 2013-12-19
Follow up post, summing up alternatives (especially the FileTea command line client): https://www.joachim-breitner.de/blog/archives/634-My-contribution-to-X…
gwern · 2013-01-08
You could use arbtt (http://www.joachim-breitner.de/projects#arbtt) and then just toss your favorite screenshot utility like ImageMagick into crontab set to fire every 10 seconds.
lrvick · 2025-11-02
Here is some background on the Haskell situation: https://www.joachim-breitner.de/blog/802-More_thoughts_on_a_bootstrapp…
Ada has had even less progress and I am not aware of any writeups.
TL;DR: Ada and Haskell need to have compilers implemented a language that has a full source bootstrap path such as C, Go, or Rust that implement just enough features to compile the official compilers.
vilhelm_s · 2024-01-29
SVG files can refer to images for bitmap graphics, only the rectangles, text, etc would be specified as vectors. See https://www.joachim-breitner.de/blog/494-Better_PDF_screenshots_with_g… for a demo.
vthriller · 2019-10-31
Re: annotated screenshots, there once was a module that allowed making snapshots of GTK windows as PDFs: https://github.com/nomeata/gtk-vector-screenshot
Edit: here it is in action, with selectable text: https://www.joachim-breitner.de/various/pdf_screenshot_3.pdf
rgoulter · 2019-02-25
An even more extreme case of this is trying to bootstrap a compiler from the first version, e.g.:
http://www.joachim-breitner.de/blog/748-Thoughts_on_bootstrapping_GHC
"""So it seems that besides GHC, only ever HBC was used to compiler GHC.
HBC is a Haskell compiler where we find the sources of one random version only thanks to archive.org.
Parts of it are written in C, so I looked into this:
Compile HBC, use it to compile GHC-0.29,
and then step for step build every (major) version of GHC until today.
....
[M]ost of [HBC] is written in LML, and the LML compiler is written in LML."""
qznc · 2018-06-09
Related by name: the incredible proof machine
https://www.joachim-breitner.de/blog/682-The_Incredible_Proof_Machine
anc84 · 2016-09-26
Oh yes! At least Kobo readers are Linux and you can SSH in. You could even install another distro I believe. Some ugly hack could be rendering the display content on your machine and just sent the image over.
https://github.com/koreader/koreader uses Lua so maybe one could add some bidirectional or at least PC->Reader flow of data.
edit: VNC! https://www.joachim-breitner.de/blog/660-Using_my_Kobo_eBook_reader_as…
jackschultz · 2013-08-11
I believe there was a post about this earlier that the game is solved[1]. Interesting game for those who don't know that, or who want to go through the exercise to figure out the correct strategy.
[1] https://www.joachim-breitner.de/blog/archives/604-Ultimate-Tic-Tac-Toe…
gtani · 2013-07-26
espo · 2011-06-20
You can connect without https, that seems to work:
http://www.joachim-breitner.de/blog/archives/494-Better-PDF-screenshot…
danieldk · 2015-02-19
Lots of people complain about performance reasoning in Haskell being hard, which is partially true. But mostly, IMO it is simply different from doing so in C, so you need to unlearn/relearn all your performance tweaking skills.
I don't agree. First, of all, the naive solution in C is often pretty fast, while the naive solution in Haskell often has obnoxious runtime properties.
Then, most C optimization performance reasoning applies to Haskell as well: keep your data small, in contiguous memory, etc. The first thing that complicates optimization in Haskell is that defacto Haskell data structures are the opposite: pointer/thunk-rich. So, you usually end up with libraries such as 'vector', doing the heavy lifting in the ST monad.
Then, laziness adds even more complications, both in that it adds a new class of bugs (of course, Haskell removes buffer overflows et al.) which tend to be relatively hard to debug (the heap explodes in less expected places).
When you write production code, you usually accumulate some monads. Unfortunately, the relatively obvious way to use multiple monads (monad transformers) is slow. So, you have to roll your own monad stacks:
https://wiki.haskell.org/Performance/Monads
---
In the end, even something as simple as reading a list integers in the IO monad can be an exercise in frustration:
http://www.joachim-breitner.de/blog/620-Constructing_a_list_in_a_Monad
The same can't be claimed for C. Even a newcomer could do it.