A robust and concise yet powerful API for communication with arbitrary relational databases using SQL.
Concise and crisp API. Just a few functions and two monads doing all the boilerplate job for you.
A powerful transaction abstraction, which provides an automated resolution of conflicts. The API ensures that you're only able to perform a specific set of actions in the transaction context, which allows Hasql to safely resolve conflicting transactions by automatically retrying them. This is much inspired by STM and ST.
Support for cursors. Allows to fetch virtually limitless result sets in a constant memory using streaming.
Employment of prepared statements. Every statement you emit gets prepared and cached. This raises the performance of the backend.
Automated management of resources related to connections, transactions and cursors.
A built-in connections pool.
Compile-time generation of templates. You just can't write a statement with an incorrect number of placeholders.
Ability to map to any types actually supported by the backend.
- Fix the transaction conflicts bug