Существует ли база данных Haskell с использованием алгебраических типов данных?

Я программирую лексику в Haskell в свободное время.

У меня есть файл со словами, где элементы моделируются как алгебраические типы данных, которые выглядят как

Word { _frq=1
     , _fra="le"  
     , _eng="the; him, her, it, them"
     , _deu="der,die,das; er,sie,es"
     , _uses=[Determiner [], Pronoun []]
     , _phrase=" vive la politique, vive l'amour"
     , _sentence="long live politics, long live love"
     , _satz="Lang lebe die Politik, lang lebe die Liebe."
     }

Чаще всего немецкий перевод _deu= и _satz= чаще всего представляет собой пустую строку, которую я хочу обновить в рамках программы.

Теперь у меня есть несколько вопросов: 1. Существует ли база данных, использующая типы данных Haskell для haskell (мне бы очень хотелось, чтобы в моей базе тоже была безопасность типов)? То, что я нашел, это привязки HDBC к MySQL и тому подобное, а также некоторые другие вещи xml/JSON.

  • Если я обновляю файл вместо использования базы данных, есть ли способ перекомпиляции всей программы - было бы немного утомительно сделать это.

и третий вопрос

Я хочу сохранить изученные словари в структуре данных, которые нужно часто обновлять, так как на каждом этапе обучения я обновляю число, указывающее знание этого слова, и сортирую эту структуру данных при вставке/или после нее. Затем я выбираю новое слово, основанное на его позиции в этой структуре данных. Списки кажутся неэффективными для выполнения полного перебора списка, и сортировка - это большое усилие, если есть лучшее решение. Заметка, наконец, у меня есть только 5000 записей в списке, так что, может быть, это беспокоит скорость в неправильном месте?

Ответ 1

По существу, взгляните на Acid-State. Там также учебник для него как часть курса Crash Hackstack.

Он делает то, что вы просите в плане поддержания безопасности типов в модели. Я не уверен, насколько это полезно для вас, но я использовал его в нескольких веб-приложениях, включая здесь, и здесь (вторая часть является частью попытки бенчмаркинга с использованием HDBC против MongoDB и AcidState, поэтому вы можете использовать его, чтобы увидеть, как три сравните реализацию в контексте веб-приложения Haskell).

К вашему третьему вопросу, в 5000 вставок/чтений, вы действительно не должны беспокоиться о производительности. Если вы посмотрите на те контрольные показатели, о которых я упомянул, "большой" ориентир проводит (относительно небольшие) 50 000 транзакций в очень коротком порядке и они были более мясистыми вставками, чем то, что вы, кажется, делаете.

Ответ 2

Откроется Persistent от Yesod:

Persistent - это ответ Yesods на хранение данных - универсальный интерфейс хранения данных для Haskell, безопасный для типов.

[...]

Persistent позволяет нам выбирать между существующими базами данных, которые сильно настраиваются для разных случаев использования хранилища данных, взаимодействовать с другими языками программирования и использовать безопасный и продуктивный интерфейс запросов, сохраняя при этом тип безопасности типов данных Haskell.

Постоянный следует за руководящими принципами безопасности типов и сжатого, декларативного синтаксиса.