Наиболее используемая библиотека абстракций базы данных в Haskell - HDBC . Это означает, что запросы просто представлены как String
с заполнителями. Меньше людей используют HaskellDB , который обеспечивает безопасный для типов способ создания запросов. Ничто не запрещает иметь пользовательские типы данных для представления общих запросов и настраиваемые функции для их построения.
Значения в Haskell неизменны, это означает, что бесполезно иметь изменяемый объект, соответствующий записи в базе данных. Вместо этого я думаю, что более распространенным является определение пользовательских типов данных и функций, которые собирают и переносят / переносят значения этих типов в / из базы данных.
Всякий раз, когда необходимы обновления базы данных, они могут запускаться в какой-то монаде с состоянием в IO
. Это позволит, например, сохранить соединение открытым или сделать что-то между запросами.
Наконец, функции первого класса, так что можно создавать все функции на лету. Таким образом, сама функция может инкапсулировать любую информацию, которую вы хотите.
Итак, я думаю, что обычный подход на Haskell состоит из
- алгебраические типы данных для представления фактических данных (в виде неизменных значений)
- остальная часть приложения для преобразования этих значений
- функции, которые генерируют запросы (инкапсулируют детали схемы, маршалируют данные в / из типов данных Haskell)
- (опционально) монада с состоянием для выполнения запросов (скрыть детали доступа к базе данных)
- функции, которые выполняют запросы (скрыть детали доступа к базе данных)