我在业余时间在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个列表条目,所以也许它担心速度在错误的位置?
答案 0 :(得分:9)
数据库方面,请查看Acid-State。作为Happstack Crash Course的一部分,还有a tutorial。
在维护模型中的类型安全方面,它可以满足您的要求。我不确定这对你有多大帮助,但我已将其用于几个网络应用,包括here和here(第二个是一个基准测试尝试使HDBC对抗MongoDB和AcidState,因此您可以使用它来查看三者如何在Haskell Web应用程序的上下文中实现比较)。
对于第三个问题,在5000次插入/读取时,真的不应该担心性能。如果你看一下those benchmarks I mentioned,那么“大”基准就会以非常短的顺序运行一个(相对较小的)5万笔交易,并且它们比你似乎做的更加插入。
答案 1 :(得分:8)
从Yesod查看Persistent:
持久性是Yesod对数据存储的回答 - 一种用于Haskell的类型安全的通用数据存储接口。
[...]
Persistent允许我们在现有数据库中进行选择,这些数据库针对不同的数据存储用例进行了高度调整,与其他编程语言互操作,并使用安全且高效的查询接口,同时仍保持Haskell数据类型的类型安全。
Persistent遵循类型安全和简洁,声明性语法的指导原则。