我正在嘗試使用Shake,這看起來很有希望,但是我碰到了一堵小牆。我對哈斯克爾相當陌生,所以也許我錯過了一些明顯的東西,但這裏是我的問題:如何在Shake中定義自定義規則:Development.Shake.Core隱藏
我想在我的搖動程序中定義一種新的規則。這條規則會從依賴關係中計算出一個值,並讓它存儲在數據庫中。所以如果依賴關係是最新的,那麼shake db值總是有效的。
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'
那麼一個人如何可以定義新規則?
獎金的問題是:我的想法是有趣的還是有更好的方法來做到這一點?當考慮如何使用搖,我有很多規則會有這種行爲。這避免了大量的臨時文件並利用shake db。事實上,我的下一步是嘗試爲「文件系統免費規則」定義一個通用規則。用戶只需提供一個key → Maybe (Action value)
函數。
感謝您的快速和全面的反應! –
(編輯:S最大5分鐘)我想我可以創建大量的小文件。我認爲這個趨勢更傾向於把事情放在數據庫中以提高性能,但現在我明白了你的觀點。也許使用像編譯工具和分頁的sqlite這樣的'真正'db可以解決這些問題(如果以人類可讀形式序列化的值更多)。 –
是的,如果它是一個真正的分貝,那麼可能會有方法查看其中的內容,從而解決了大部分這些問題。我不知道對性能的影響會是怎樣(搖一搖),但它會帶來一些好處。 –