11

私は余暇に 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 データ型を使用するデータベースはありますか (私のデータベースでも型安全性が本当に欲しいのですが)? 私が見つけたのは、MySQL などへの HDBC バインディングと、その他の xml/JSON のものでした。

  1. データベースを使用する代わりにファイルを更新する場合、プログラム全体を再コンパイルする方法はありますか?それを行うのは少し面倒です。

そして3つ目の質問

学習した語彙を頻繁に更新する必要があるデータ構造に保存したいと思います。各学習ステップで、この単語の知識を示す数値を更新し、挿入中/または後でこのデータ構造をソートします。次に、このデータ構造内の位置に基づいて新しい単語を選びます。リストは、完全なリストのトラバーサルを行うには非効率的であり、より良い解決策がある場合、並べ替えは大きな労力になります。最後に、私は 5000 のリスト エントリしか持っていません。

4

2 に答える 2

11

データベースに関しては、Acid-Stateを見てください。Happstack Crash Course の一部としてチュートリアルもあります。

モデルの型安全性を維持するという点で、あなたが求めることを行います。これがあなたにとってどれほど役立つかはわかりませんが、ここここを含むいくつかのWebアプリで使用しました(2番目のものは、HDBCをMongoDBと比較するベンチマーク試行の一部です。 AcidState を使用して、Haskell Web アプリケーションのコンテキストで 3 つの実装がどのように比較されるかを確認できます)。

3 番目の質問ですが、5000 回の挿入/読み取りでは、パフォーマンスについて心配する必要はありません私が言及したこれらのベンチマークを見ると、「大きな」ベンチマークは (比較的小さい) 50 000 トランザクションを非常に短い順序で実行し、実行しているように見えるよりも肉厚な挿入でした。

于 2013-08-19T14:53:13.737 に答える
9

Yesod のPersistentをチェックしてください:

Persistent はデータ ストレージに対する Yesod の答えです。Haskell 用の型安全でユニバーサルなデータ ストア インターフェイスです。

[...]

Persistent を使用すると、Haskell データ型のタイプ セーフを維持しながら、さまざまなデータ ストレージのユース ケースに合わせて高度に調整された既存のデータベースから選択し、他のプログラミング言語と相互運用し、安全で生産的なクエリ インターフェイスを使用することができます。

持続性は、型安全性と簡潔な宣言構文の基本原則に従います。

于 2013-08-19T14:56:39.120 に答える