My main inspiration came from Servant [1]
In Servant, you define a type-level API specification and then you use this type specification to:
- Implement a web server
- Generate client functions
I am still working on the API design and would love to get some feedback on the pattern.