Существует ли база данных 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.
Постоянный следует за руководящими принципами безопасности типов и сжатого, декларативного синтаксиса.