特定のオブジェクトを使用できないときに読み込むことができる透過キャッシュを実装しようとしています。つまり、(name
)でインデックスされた既存のオブジェクトを返すことができます。キャッシュを実装する
loader' objs name = case findObj objs name of
Nothing → (new_obj, loader' new_objs)
Just obj → (obj, loader' objs)
where
new_objs = [(name, new_obj)] ++ objs
new_obj = readObj name
loader = loader' []
が、私はまさに私が:)
をしたい何かのように見えます
Occurs check: cannot construct the infinite type: t = (ObjType, String -> t)
を取得していますどのように機能を修正することができます。これは、実行中の
私が試してみましたそれはコンパイルするように?
明確化:要求され、署名(findobjをキー経由で見つかった既知の値を返すか、何も、readObjは、キーの新しいOBJを作成する)として
:
findObj :: [(String, ObjType)] -> String -> Maybe ObjType
readObj :: String -> ObjType
そして、はい - 私はキーはファイル名であり、何らかのオブジェクトが必要になるたびにファイルを読み込み+解析したくないので、キャッシュが必要です。
findObjとreadObjの定義を参照する必要があると思います –
機能的な言語でキャッシュの概念が必要なのでしょうか? 私はいつもそれが命令的な最適化だと思っていました。 – Pyrolistical
findObj、readObjのシグネチャが追加されました – viraptor