Open-Source Haskell: 29 Awesome Projects, Tools, and Libraries

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.

Among them, you will find cool user-facing applications, such as SimpleX and hledger. There’s also plenty of compilers and linters, as well as useful tools and libraries.

Most of the projects are, at the time of writing, actively maintained.

ShellCheck

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.

Hasura

Hasura is an open-source GraphQL engine that gives you instant access to a GraphQL API for your data. Haskell is the most used language in their repository, followed by languages like TypeScript, JavaScript, Python, and Go.

hledger

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

SimpleX logo

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

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. 😌

IHP

IHP logo

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.

Hakyll

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

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.

Gitit

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.

Carnap

Carnap is a formal logic framework for creating and exploring formal languages. It’s so awesome it even comes with a book and a paper.

The framework consists of a set of core libraries for defining, parsing, and checking formal languages in Carnap, a web-server application, and a set of browser-based applications for educators written using GHCJS, the Haskell-to-JavaScript compiler.

It was initially developed at Kansas State University but now is used by universities all around the globe.

Tidal Cycles

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.

If you want to hear how it sounds, here’s a good showcase. And if you want to learn more about Tidal Cycles, I suggest listening to this interview on Music Hackspace.

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 RUN instructions.

git-mediate

git-mediate is a useful tool that you can use to handle merge conflicts.

xmonad

xmonad logo

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.

KMonad

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

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.

Duckling was originally written in Clojure, but it was later rewritten in Haskell to achieve greater performance and safety.

Semantic

Semantic is a Haskell library and command-line tool made by GitHub for parsing, analyzing, and comparing source code across many different languages like JavaScript, Python, Go, and more.

Darcs

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.

Taskell

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.

Underneath, it uses Haskell’s Brick library, which has also been used to create cool TUI apps like Matterhorn and command-line tetris.

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.
  • PureScript is a functional programming language that’s heavily inspired by Haskell and compiles to JavaScript.
  • 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.
  • Elm is a functional language that compiles to JavaScript.
  • 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?

As you can see, Haskell can be used to build all kinds of projects: CLI applications, web applications, parsers and compilers, frameworks and engines. It can even be compiled to mobile and JavaScript if necessary.

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.

Haskell courses by Serokell
More from Serokell
top software written in haskelltop software written in haskell
Serokell’s Work on GHC: Dependent Types, Part 4Serokell’s Work on GHC: Dependent Types, Part 4
Parser combinators in HaskellParser combinators in Haskell