haskell-project-ideas
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
- Implement a function from
Double -> Stringbased on "Ryū: Fast Float-to-String Conversion". (★★★)
Data structures
- Time-based UUID library. Cassandra and many other networked servers provide a
uuidtimedata type, which stores a UUID that has its date encoded in its first few bytes, such that the output of successive generateduuidtimeis roughly in sorted order, and that there exists a function to reconstruct at least the day part of theuuidtime. (★★) - Validation library for JSON structures. The
aesonpackage is great and performant but complects validation and decoding of JSON data. Build a library that uses recursion schemes to check validity of a JSONValueand reports all possible errors at once, a la theValidationmonad. (★★) - 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,LocalTimeandUTCTime. The difficulty here is in ensuring compatibility with the whole ecosystem of libraries that useUTCTime. (★★★★)
Pretty-printing
- A library providing a useful API to build precedence-sensitive pretty printers atop
prettyprinter.
Web programming
- Declarative interface to airship using some sort of deep embedding. (★★)
- Library for HTTP tracing with lightstep.
haskell-opentracingmight be somewhere to start. (★★★) - HTTP library like
http4satop eitherstreamlyor streaming.
macOS
- Bridge to
NSLinguisticTaggerandNSOrthographyfor natural language processing. (★)
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, andMYAPP_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).