2013-08-19 2 views
7

Я программирую лексический тренер в 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.

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

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

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

ответ

9

База данных, взгляните на Acid-State. Для него также есть a tutorial как часть курса Crash Hashstack.

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

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

+1

Сервер http://acid-state.seize.it/ не реагировал на 2016-07-17. Я изменил ссылку на репозиторий GitHub. Если это временная ошибка, не стесняйтесь возвращать исходную ссылку. –

7

Persistent Отъезд из Йесод:

Persistent является ответом Йесод к данным Storage- типа безопасный, универсальный магазин данных интерфейс для Haskell.

[...]

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

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

+3

Могут ли постоянные типы сумм типа типа «Либо»? –

+0

@GabrielGonzalez Я все еще изучаю это, поэтому я не уверен, но думаю, нет. –

+3

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

Смежные вопросы