3

私は次のことgetSessionTokenをしたい: メソッド:

  • cachedSessionToken" " が古くなっている場合 (1 時間以上前に作成された場合)、サーバーにリクエストを送信します

  • サーバーにリクエストを送信すると、結果を " " に保存し、呼び出されるvariableたびにそれを返します。getSessionToken

したがって、アイデアは結果をキャッシュし、必要なときに返すことです。それ以外の場合は、getSessionTokenRemote最初にサーバーにリクエストを送信し、キャッシュしてから結果を返します。の正確な実装には興味がありませんがgetSessionTokenRemote、次のようなものになる可能性があります。

getSessionTokenRemote :: IO String
-- or just
getSessionTokenRemote :: String

何でも最適です。

Haskell のような純粋な関数型言語でそれを行うにはどうすればよいのでしょうか。

4

2 に答える 2

5

変数に書き込みたい場合はgetSessionTokenRemote、変数を渡す必要があります。たとえば、次のような型を指定します。

type CacheInfo = {- you've got to fill this bit in -}
getSessionTokenRemote :: IORef CacheInfo -> IO String

このような型を取れば、実装はそれほど難しくありません。

実装を非表示にする場合の代替手段は、値を生成する値を書き込むことgetSessionTokenRemoteです。上記のタイプの内部実装といくつかの空のキャッシュ値を想定すると、次のemptyCacheInfoように実行できます。

getGetSessionTokenRemote :: IO (IO String)
getGetSessionTokenRemote = getSessionTokenRemote <$> newIORef emptyCacheInfo

これは、IO実行されると、新しいキャッシュでセッション トークンを取得するアクションを生成するアクションです。

于 2013-10-28T03:27:39.163 に答える