この質問はすでに2010年に尋ねられましたが、今日はより良い回答があるかもしれないと思います。 基本的には、何らかのオブジェクトを格納してすべての要求にアクセスする必要があります。理想的には、要求内からそのオブジェクトを変更できるようにしたいと考えています(MVarまたはIORefがそうするでしょう)。Snap Frameworkを使用してサーバーサイドにオブジェクトを保存するにはどうすればよいですか?
スナップショットチュートリアルでは、可能性があると思われるようですが、スナップレットの使い方がほとんど説明されています(このチュートリアルは結局のためのものです)、この「App」オブジェクトの動作や保存方法。私はスナップレットを必要としない私のケースにそれをどのように適用するか分かりません(私はAPIを作っているので、Heistは必要ありません)。
ので、デフォルトのコード与えられた:私はどこかに私がsomeHandlerに使用できることをいくつかのオブジェクトを「登録」し、これを変更するにはどうすればよい
site :: Snap()
site = do
ifTop (writeBS "hello world") <|>
route [ ("stuff/:param", someHandler) ] <|>
dir "static" (serveDirectory ".")
を? 2010年の答えは、すべてのハンドラに部分的に適用するだけですが、これはうまくいくはずですが、Snapletチュートリアルではより良い方法が必要だと思っています。
あなたが参照している回答にリンクを追加できますか? –
ああ、申し訳ありません:https://stackoverflow.com/questions/3903205/how-do-i-maintain-a-server-side-state-with-snap-framework – Ulrar
ほとんどすべてのスナップ関数は戻り値の型 ' MonadSnap m => .. - > m X'。だからインスタンス 'MonadSnap m => MonadSnap(ReaderT m)'(すでに存在しない場合)を作成し、環境を明示的に渡す必要はありません。 – user2407038