Reading it’s source code a decade ago was a turning point for me. Prior to that, I always felt an insurmountable gap between my toy codebases and real projects. All those open source software written in C++ etc. looked so unapproachable that I felt like I could not write production ready software.
Pandoc however, was written in a language I didn’t know and did something very complicated very thoroughly, yet remained accessible. It was very nicely laid out and I could easily follow how it constructs it’s internal representation of documents and converts between them. I think this made me catch the functional programming bug for the next decade that let me build way bigger things than I had any right to, without getting crushed underneath all the complexity.
Putting together something in Java or even contributing to OOP Python codebases was still like an exercise in frustration, no matter how much better I thought I’m getting at programming I would feel stupid trying to wrap my head around those abstractions and hierarchies. Somehow FP just clicked for me and made me see how I could start from a simple library call and little by little build the complete program.
Today I am comfortable with all kinds of paradigms and levels of abstraction, but I definitely owe a lot to Pandoc for showing me I was smart enough to understand and modify real world software I did not build myself.
https://github.com/simonmichael/quickbench - Easily time one or more commands with one or more executables and show tabular results
https://github.com/simonmichael/shelltestrunner - Easy, repeatable testing of CLI programs/commands
https://github.com/simonmichael/hledger - Robust, fast, intuitive plain text accounting tool with CLI, TUI and web interfaces
https://github.com/haskell-game/fungen - A lightweight, cross-platform, OpenGL-based 2D game engine in Haskell
https://haskell-game.dev - a small selection of the many games written in Haskell
https://haskell-via-sokoban.nomeata.de - Haskell via Sokoban
https://lhbg-book.link - Learn Haskell by building a blog generator
https://github.com/input-output-hk - the Cardano blockchain and Daedalus wallet
https://github.com/jgm/pandoc - Universal markup converter (already mentioned above)
https://github.com/simplex-chat/simplex-chat - secure messaging platform
https://www.libhunt.com/l/haskell - more projects...
Hadn't seen Pandoc before. It's a Haskell library/cli that supports a large number of input/output document formats in varying degrees of completeness: https://github.com/jgm/pandoc
From having tilted at this windmill a little myself, I think:
1. It's tricky enough to handle correctly all the under-specified corner cases of basic markdown -- not to mention the popular extensions to it. The cognitive load of doing it with complex regexps gets heavy, quickly.
2. I'm incredibly impressed with all the work that John MacFarlane has put into the problem, for example in [Pandoc] and [Cheapskate].
[Pandoc]: https://github.com/jgm/pandoc
[Cheapskate]: https://github.com/jgm/cheapskate
- Elm's Time Travelling Debugger: http://debug.elm-lang.org/
- Pandoc: https://github.com/jgm/pandoc
- XMonad: http://xmonad.org/
- (GHC, should really count)