非常に有望に見えるシェイクを使おうとしていますが、小さな壁にぶつかりました。私はhaskellにまったく慣れていないので、明らかな何かが欠けているかもしれませんが、ここに私の問題があります:
シェイクプログラムで新しい種類のルールを定義したいと思います。このルールは、依存関係から値を計算し、それをshakeにデータベースに保存させます。したがって、依存関係が最新の場合、shakedb値は常に有効です。
data PrjList = PrjList FilePath deriving (Typeable,Show,Eq,Hashable,Binary,NFData)
instance Rule PrjList [(String,FilePath)] where
validStored q a = True
-- Generate the dependency
getProjectList :: FilePath -> Action [(String,FilePath)]
getProjectList dir = apply1 $ PrjList dir
-- We want to traverse recursivly all subdir but stop once we find a BuildConfig file
defaultProjectList :: Rules ()
defaultProjectList = defaultRule $ \(PrjList dir) -> Just $ do
-- blabla...
return []
しかし、私import Development.Shake.Core
がしようとすると
Could not find module `Development.Shake.Core'
It is a member of the hidden package `shake-0.7'.
it is a hidden module in the package `shake-0.7'
it is a hidden module in the package `shake-0.8'
Use -v to see a list of the files searched for.
そして、私がそれをインポートしない場合、私は持っています
`validStored' is not a (visible) method of class `Rule'
では、どうすれば新しいルールを定義できるでしょうか。
ボーナスの質問は次のとおりです。私のアイデアは興味深いですか、それともそれを行うためのより良い方法がありますか?シェイクの使い方を考えると、この振る舞いをするルールがたくさんありました。これにより、一時ファイルが大量に発生するのを防ぎ、シェイクデータベースを利用できます。実際、私の次のステップは、「ファイルシステムフリールール」の一般的なルールを定義することです。ユーザーはkey → Maybe (Action value)
関数を提供する必要があります。