我正在尝试使用看起来非常有前途的 Shake,但我碰上了一面小墙。我对haskell很陌生,所以也许我遗漏了一些明显的东西,但这是我的问题:
我想在我的摇动程序中定义一种新的规则。该规则将从依赖项中计算一个值,然后让 Shake 将其存储在其数据库中。因此,如果依赖项是最新的,则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'
那么如何定义新规则呢?
额外的问题是:我的想法有趣还是有更好的方法?在考虑如何使用抖动时,我有很多规则会产生这种行为。这样可以避免拥有大量临时文件并利用抖动数据库。事实上,我的下一步是尝试为“文件系统自由规则”定义一个通用规则。用户只需要提供一个key → Maybe (Action value)
功能。