問題タブ [acid-state]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
285 参照

haskell - 酸性状態でズームする方法は?

上記のコードを考えると、これを行うことができるはずだという印象を受けています。

しかし、GHC は次のように文句を言います。

何か案は?

0 投票する
1 に答える
422 参照

haskell - Data.Acid を使用するときにイベントの実装の変更を処理する方法

持続性を使用する適度なサイズのアプリケーションがあり、次のバージョンのサーバー用にイベントData.Acidの 1 つの実装を更新する必要がある状況に遭遇しました。Updateつまり、私は次のようなものを持っています

さて、明らかに、トランザクション履歴が破損するため、実装を無計画に変更することはできません。そのため、人々は通常これをどのように処理するのか疑問に思っていました. 私の見方では、私のオプションは次のとおりです。

  1. サーバーを停止します。createCheckpoint私ののために実行しますAcidStateEvent実装を更新してから、サーバーを再起動してください。新しいスナップショットからロードするため、変更Updateが古いイベントに対してトリガーされることはありません。

  2. Update新しい名前 ( など) でaa new を作成しmyUpdate_v2、サーバー ロジックを更新してmyUpdate_v2、元の の代わりにどこでも使用するようにしmyUpdateます。

どちらの選択肢にもメリットがあると思います。(1) は、コードベースに古い機能を保持する必要がないため、より優れていますが、更新するサーバーごとに非常に慎重に行う必要があります。そうしないと、データが破損する危険があります。(2) の方が安全ですが (特にモジュールのエクスポートから古いものを削除すると、myUpdate誤って古い実装をどこでも使用しないようにすることができます)、それ以外の場合は少し見苦しく感じます。

これを行うためのより良い方法はありますか?これは、長期にわたるプロジェクトで必ず何度も遭遇するものだと考えているため、イベントの実装に変更を適用するための優れた標準的なワークフローが必要です。

0 投票する
1 に答える
135 参照

haskell - テンプレート haskell でテンプレート haskell を実行する

StateDecoder のものは使用できません

しかし、状態を宣言してこのようにラップすると...

それからそれは動作します

私はこのパターンに従うデータ型をたくさん持っているので、それを解決するために TH を書いてみようと思いました。

これはすべて美しく機能しますが、実行しようとすると...

私は...

テンプレート Haskell のステージングの問題と関係があることはわかっていますが、解決方法がわかりません。私がやればうまくいく

しかし、それは役に立ちません!

0 投票する
1 に答える
161 参照

haskell - 酸状態で一連のイベントをアトミックにする

イベントのシーケンスを 1 つのアトミック トランザクションにグループ化するのに苦労しています。

酸状態で保存されたを考えて、Mapを実装したいと想像してくださいData.Map.alter。多分値を受け取って値を返す関数は変更ログに保存できないため、酸性イベントを定義することはできませんAlterquery st Lookup ...ただし、古い値を検索してから新しい値を書き込む (または古い値を削除する)ように呼び出す関数を作成するupdate st Insert ...と、競合状態が発生し、その間に発生した更新から情報が破棄される可能性があります。

https://github.com/acid-state/acid-state/pull/48では、手動ロックを行うためにエクストラを使用しましたMVarが、より良い解決策があるはずです。

何か案は?

0 投票する
2 に答える
209 参照

haskell - WAI ハンドラー内のデータベースと通信する際の IO によるエラーの回避

warp、wai、acid-state を使用して Haskell で Web サービスを作成しています。現在、データベースとの対話を必要とする 2 つのハンドラー関数があり、後者は私に問題を引き起こしています。

1 つ目は、登録です。

ご覧のとおりIO、 で更新を実行することで、応答への感染を回避することができましたlet _ = ..

ログイン関数 (現在はユーザー マップのみを返す) では、IO実際に応答で結果を返す必要があるため、 を避けることはできません。

これにより、次のエラーが発生します。

エラーは、値を返す db クエリが原因であると考えられIOます。私が最初に考えたのはResponse、型シグネチャを に変更することでしたIO Responseが、最上位の関数は、Responseではなく が必要であると不平を言いましたIO Response

同様に、次のように書きたいとregisterUser思います。

しかし、これは非常によく似たエラーを引き起こします。

registerUser完全を期すために、 andを呼び出す関数を次に示しますloginUser

これらの IO エラーを回避するにはどうすればよいですか?