haskell-project-ideas icon indicating copy to clipboard operation
haskell-project-ideas copied to clipboard

Free ideas, worth every penny

Haskell project ideas

This is a list of ideas for Haskell open-source projects. Most of these ideas are centered around problems that I've run into in the real world.

This list is in the public domain; you may implement any of these projects, and you do not have to give me credit. If you, the reader, have project ideas, open a PR and I'll add them. These ideas are suffixed with a number of stars corresponding to my rough estimate of the time and effort involved therein.

Effect implementations

  • ~RWSC carrier interpreting (Reader r :+: Writer w :+: State s) (★)~
  • Structured logging with katip. (★★)
  • Memo, a là Control.Monad.Memo. (★★★)
  • Region-based resource management as described by Oleg. (★★★★★)
  • Delimited continuations (this may or may not be possible) (💀)

Algorithms

Data structures

  • Time-based UUID library. Cassandra and many other networked servers provide a uuidtime data type, which stores a UUID that has its date encoded in its first few bytes, such that the output of successive generated uuidtime is roughly in sorted order, and that there exists a function to reconstruct at least the day part of the uuidtime. (★★)
  • Validation library for JSON structures. The aeson package is great and performant but complects validation and decoding of JSON data. Build a library that uses recursion schemes to check validity of a JSON Value and reports all possible errors at once, a la the Validation monad. (★★)
  • Natural-language date/time parser. You could fork duckling. (★★★★)
  • While you're at it, you could create a new date/time library, which would be most welcome for those of us who have suffered the differences between Day, Date, LocalTime and UTCTime. The difficulty here is in ensuring compatibility with the whole ecosystem of libraries that use UTCTime. (★★★★)

Pretty-printing

  • A library providing a useful API to build precedence-sensitive pretty printers atop prettyprinter.

Web programming

macOS

Unix

  • Declarative library for command line interfaces, a là cobra. (★★★)
  • Library for integration with systemd socket activation. (★★★)
  • Library to pull configuration records from environment variables. Given the environment variables MYAPP_PORT=33, MYAPP_URL=foo, and MYAPP_NAME=go, and a corresponding record type
data Env = Env { port :: Int, url :: String, name :: String}
  deriving (Generic, FromJSON)

fromEnv :: FromJSON e => IO (Either String e)

I should be able to run fromEnv "myApp" and get back an Env with values filled in from the environment variables. (★ for piggybacking off of aeson, ★★★ for a fresh Generic implementation).