是否有使用代数数据类型的Haskell数据库?

eps*_*lbe 10 database haskell algebraic-data-types

我在业余时间在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."
     }
Run Code Online (Sandbox Code Playgroud)

通常是德语翻译,_deu=并且_satz=通常只是一个空字符串,我想在程序中更新.

现在我有几个问题:1.是否有一个使用Haskell数据类型的数据库用于haskell(我真的很喜欢在我的数据库中输入安全性)?我找到的东西是HDBC与MySQL之类的绑定,以及其他一些xml/JSON的东西.

  1. 如果我更新文件而不是使用数据库,有没有办法重新编译整个程序 - 这样做会有点乏味.

和第三个问题

我想将学习的词汇保存在需要经常更新的数据结构中,因为在每个学习步骤中我更新一个表示该词知识的数字 - 并在插入/或之后对该数据结构进行排序.然后我根据它在这个数据结构中的位置选择一个新单词.对于进行完整列表遍历而言,列表似乎效率低下,如果有更好的解决方案,排序是一项很大的工作.最后一个注释我确实只有5000个列表条目,所以也许它担心速度在错误的位置?

Ina*_*thi 10

数据库方面,看看酸状态.作为Happstack Crash Course的一部分,还有一个教程.

在维护模型中的类型安全性方面,它可以满足您的要求.我不确定这对你有多大帮助,但是我已经把它用在了几个网络应用程序中,包括这里,这里(第二个是HDBC对抗MongoDB的基准测试尝试的一部分) AcidState,因此您可以使用它来查看三者如何在Haskell Web应用程序的上下文中实现比较.

对于你的第三个问题,在5000次插入/读取时,你真的不应该担心性能.如果你看一下我提到的那些基准测试,那么"大"基准测试会在非常短的时间内完成(相对较小的)50 000次交易,并且它们比你似乎做的更加插入.


Pet*_*lák 9

查看Yesod的Persistent:

持久性是Yesod对数据存储的回答 - 一种用于Haskell的类型安全的通用数据存储接口.

[...]

Persistent允许我们在现有数据库中进行选择,这些数据库针对不同的数据存储用例进行了高度调整,可与其他编程语言进行互操作,并使用安全且高效的查询接口,同时仍保持Haskell数据类型的类型安全性.

Persistent遵循类型安全和简洁,声明性语法的指导原则.

  • 可以持久处理像"Either"这样的求和类型吗? (3认同)
  • 它对sum类型有基本支持,但这种支持实际上是围绕数据库约束构建的,而不是允许嵌入完全任意的ADT. (3认同)