A robust and concise yet powerful API for communication with arbitrary
relational databases using SQL.
Features:
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.