In discussions about Haskell, sometimes a question is raised – what exactly can you build with the language?
To answer this question, this article will look at some of the more interesting Haskell open-source projects on GitHub.
Most of the projects are, at the time of writing, actively maintained.
The most starred Haskell project on GitHub is ShellCheck, a static analysis tool for analyzing shell scripts. At the time of writing, the project has 29k stars.
The goal of ShellCheck is to help users write correct shell scripts by pointing out syntax and semantic issues. For some examples of what it can prevent, see their gallery of bad code.
Did you know that you can track your finances with Haskell? 💰
hledger is a tool for plain-text accounting that works on Linux, macOS, and Windows. It’s lightweight, cross-platform, and supports double-entry accounting.
SimpleX is a decentralized messaging and application platform without any personal user identifiers. One of the most interesting things about this project is that the SimpleX Chat application is mostly for mobile users – and so they compile Haskell for iOS and Android!
To learn more about the project, you can read our interview with Evgeniy Poberezkin, the creator of SimpleX.
Pandoc is a widely-used tool that converts text from one markup format to another. To list just some of the formats that this library supports: commonmark, docx, epub, fb2, gfm, and so on.
In fact, we take advantage of the tool in our daily work to generate beautiful, branded audit report PDFs for our clients. 😌
Tired of classic web framework choices like Rails or Express? Perhaps it’s time to try Haskell.
IHP is a web development framework designed to be usable for non-Haskellers and Haskell beginners. In contrast to other popular Haskell web libraries, it’s rather heavyweight and “batteries included”.
To learn more about the project, you can read our interview with Marc Scholten, the CEO of digitally induced.
If you want to create a simple personal website, a static website generator is one of the best choices.
And Haskell has its own static website generator – Hakyll. It enables you to write content in the language you prefer, define custom config rules with its DSL, and compile the files to HTML.
It uses one of the previously listed projects – Pandoc – for Markdown and LaTeX support.
Fun fact: this very website was once using the tool. So it works. 😉
emanote is a tool that enables to create websites from plain-text notes. You can use it to showcase your wiki, notebook, knowledge base, second brain, or Zettelkasten – whichever of these you have – to the world.
Another Haskell application that uses Pandoc behind the scenes is Gitit – a wiki program written in Haskell that stores files in a source control system such as Git, Darcs, or Mercurial.
It was initially developed at Kansas State University but now is used by universities all around the globe.
Tidal Cycles is a tool for live coding music that’s written in Haskell.
With it, you can use code to create sounds and sound sequences. If you take it far enough, you can even perform songs or live sets. While Tidal uses a language that’s embedded inside Haskell, you don’t actually need to know Haskell to use it.
Haskell Dockerfile Linter
Haskell Dockerfile Linter (or Hadolint) is something like ShellCheck but for Docker files. It goes through your Dockerfiles and makes sure that they follow the best practices. If you want to check out how it works, here’s an online version.
Fun fact: it uses ShellCheck for validating the bash code inside the
git-mediate is a useful tool that you can use to handle merge conflicts.
One application that you perhaps wouldn’t expect Haskell to be good for is tiling window managers. But, it turns out, one of the more popular Haskell tools is exactly that.
If you want to configure your desktop with Haskell, xmonad can help you. It’s one of the most customizable and hackable window managers out there.
Once you have customized your desktop, it’s time to customize your keyboard! 😎
KMonad is an advanced keyboard manager that works on Linux, Windows, and macOS. With it, you can customize any key or key combination on your keyboard, create multiple keyboard layers, and create bindings that respond to you holding a key or tapping it multiple times in succession. It works on virtually all keyboards.
Duckling is an open-source project by Facebook for parsing text into structured data. It’s a rule-based parser that can detect values like dates, time, numbers, quantities, durations, and distances in many different languages. You can also extend it with your own custom dimensions – types of values to parse.
Darcs is a version control system like Git but written in Haskell. It’s pretty unique among version control systems because it uses a patch-based approach instead of a snapshot-based approach (like Git does). If you’re interested, it has an official book that you can check out.
A common task for learning a language is to build your own to-do application. After some time, a toy project like this is usually dropped. But what if you never stopped developing it?
Well, you might end up with something similar to Taskell. It’s a CLI task manager with Vim-style key bindings and integrations with Trello and GitHub projects. While it’s written in Haskell, you don’t really need to know Haskell to use it.
Compilers written in Haskell
Haskell is a perfect tool for building classic programming language compilers.
Here’s some of the languages that have their compiler written in Haskell:
- Agda is a dependently-typed programming language and theorem prover.
- Unison is a futuristic functional programming language with content-addressed code.
- Kitten is a statically-typed concatenative systems programming language.
- Koka is a functional programming language with effect types.
- Carp is a typed lisp for real-time applications.
- Wasp is an open-source configuration language for developing full-stack web apps with less code.
- Grammatical Framework is a programming language for multilingual grammar applications.
- Lamdu is a projectional programming language implemented in Haskell.
Have anything to add?
If you would like to add a cool project to the list, you can do it by submitting an issue in our GitHub repo.
And if you want to hear more from us, be sure to give us a follow on Twitter or subscribe to the newsletter via the form below.