└── README.md /README.md: -------------------------------------------------------------------------------- 1 | # Haskell project ideas 2 | 3 | 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. 4 | 5 | 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. 6 | 7 | # Effect implementations 8 | * ~RWSC carrier interpreting (Reader r :+: Writer w :+: State s) (★)~ 9 | * Structured logging with [katip](http://hackage.haskell.org/package/katip). (★★) 10 | * `Memo`, a là `Control.Monad.Memo`. (★★★) 11 | * Region-based resource management as [described by Oleg](http://okmij.org/ftp/Haskell/regions.html). (★★★★★) 12 | * Delimited continuations (this may or may not be possible) (💀) 13 | 14 | # Algorithms 15 | * Implement a function from `Double -> String` based on ["Ryū: Fast Float-to-String Conversion"](https://dl.acm.org/citation.cfm?id=3192369). (★★★) 16 | 17 | # Data structures 18 | * 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`. (★★) 19 | * 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. (★★) 20 | * Natural-language date/time parser. You could fork [duckling](https://duckling.wit.ai). (★★★★) 21 | * 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`. (★★★★) 22 | 23 | # Pretty-printing 24 | * A library providing a useful API to build precedence-sensitive pretty printers atop `prettyprinter`. 25 | 26 | # Web programming 27 | * Declarative interface to [airship](http://hackage.haskell.org/package/airship) using some sort of deep embedding. (★★) 28 | * Library for HTTP tracing with [lightstep](https://lightstep.com). [`haskell-opentracing`](https://github.com/ocharles/haskell-opentracing) might be somewhere to start. (★★★) 29 | * HTTP library like [`http4s`](https://http4s.org/) atop either [`streamly`](https://hackage.haskell.org/package/streamly-0.6.0/) or streaming. 30 | 31 | # macOS 32 | * Bridge to [`NSLinguisticTagger`](https://developer.apple.com/documentation/foundation/nslinguistictagger) and [`NSOrthography`](https://developer.apple.com/documentation/foundation/nsorthography) for natural language processing. (★) 33 | 34 | # Unix 35 | * Declarative library for command line interfaces, a là [cobra](https://github.com/spf13/cobra). (★★★) 36 | * Library for integration with [systemd socket activation](http://0pointer.de/blog/projects/socket-activation.html). (★★★) 37 | * 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 38 | 39 | ``` haskell 40 | data Env = Env { port :: Int, url :: String, name :: String} 41 | deriving (Generic, FromJSON) 42 | 43 | fromEnv :: FromJSON e => IO (Either String e) 44 | ``` 45 | 46 | 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). 47 | --------------------------------------------------------------------------------