Подтвердить что ты не робот

Есть ли инструменты ORM для Haskell?

Каков наилучший способ взаимодействия с базой данных с помощью Haskell? Я привык использовать какой-то ORM (Django ORM, hibernate и т.д.), И что-то подобное было бы неплохо при создании приложений с HAppS.

Изменить: Я бы хотел свободно выбирать из Postgresql MySql и SQLite, насколько это реально происходит с базами данных.

4b9b3361

Ответ 1

Библиотека, которую я имею в виду, не ORM, но она все равно может делать то, что вы хотите.

Если вы хотите что-то, что сделает вашу базу данных доступной безопасно, когда вы интегрируете вещи в свою программу, попробуйте HaskellDB. Он в основном рассматривает вашу схему, генерирует некоторые структуры данных, а затем дает вам тип безопасных способов запроса. Это было довольно долгое время, и мнение сообщества заключается в том, что оно хорошее и стабильное.

Чтобы использовать его, вам понадобится базовая библиотека Haskell DB, такая как HSQL.

Удачи!

Ответ 2

Причина, по которой существуют библиотеки ORM, заключается в том, что между объектами на С# или Java существует относительно большая разница и то, что вы храните в базе данных. Это не так много проблем в Haskell, потому что:

  • У него нет объектов
  • Обе базы данных и список Haskell имеют свое вдохновение в теории математических множеств, поэтому трение между ними намного меньше, чем между базами данных и объектами.

Ответ 3

Стойкость довольно полезна для использования и позволяет полагаться на вывод типа для определения таблицы, к которой относится ваш запрос. Например, если в моем файле "models" есть следующее:

User
    name Text
    age Int

Login
    user UserId
    login Text
    passwd Text

Тогда я мог бы сделать это:

Just (Entity uid _)          <- selectFirst [ UserName ==. "Some User ] []
Just (Entity lid Login {..}) <- selectFirst [ LoginUser ==. uid ] []

И он знал бы, какие таблицы я имел в виду. Конечно, вы, вероятно, не хотите писать частичный код, как это, но я хотел бы подчеркнуть только запросы.

Ответ 4

На самом деле мне очень нравится подход HAppS (HAppS-State), который позволяет вам забыть о том, как пройти через маршаллинг /unmarshalling cludge ORM и позволяют просто использовать типы данных Haskell.

Ответ 5

Я лично использовал только Database.HDBC, который рекомендуется "Real World Haskell": http://book.realworldhaskell.org/read/using-databases.html

Но я согласен с тем, что определенно имеет смысл использовать уровень доступа к БД более высокого уровня, и я, вероятно, попытаюсь перейти к такой модели для будущих проектов. По этой теме я нашел этот пост с 2012 года, который содержит историю и сравнение таких решений для Haskell: http://www.yesodweb.com/blog/2012/03/history-of-persistence

Из этого я понимаю, что Persistent (documentation) и Groundhog (некоторая документация, examples) являются наиболее перспективными библиотеками в этой области. Обе библиотеки поддерживают упомянутые вами базы данных; для Groundhog он не написан в этом посте, но в этом объявлении вы можете видеть, что он поддерживает именно интересующие вас базы данных в.

Также обратите внимание на этот поток на Haskell-beginners, в котором Esqueletto упоминается как лучший выбор для операций обновления.

Обратите внимание, что постоянные корабли с Yesod и как таковые могут иметь большее значение.

Ответ 6

Вы просматривали карты сопоставления и доступа к базам данных в http://hackage.haskell.org/packages/archive/pkg-list.html#cat:Database

Я не использовал их, поэтому не могу рекомендовать какой-либо конкретный. Я также не знаю, какие базы данных вы планируете использовать.