首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Shake函数中使用``FilePattern`‘/通配符’`want`‘和’必需‘

在Shake函数中使用``FilePattern`‘/通配符’`want`‘和’必需‘
EN

Stack Overflow用户
提问于 2015-10-28 11:30:28
回答 2查看 112关注 0票数 2

函数wantneed都要求它们的输入类型为FilePath而不是FilePattern。我的输出和输入的文件名遵循一个不同的模式,输出是_build/*checker.sh,输入是./*.py。因此,我宁愿做一个表单的want

代码语言:javascript
复制
want ['_build/*checkers.sh']

代码语言:javascript
复制
want ['_build/dbchecker.sh', '_build/henk_checker.sh', ..., '_build/derp_checker.sh']

我尝试通过组合want来构建一个更复杂的getDirectoryFiles, action, need,但这是行不通的,因为getDirectoryFiles返回的是Action [FilePath]而不是FilePath

这个问题的适当解决办法是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-28 13:56:38

埃里克关于Action是一个单曲的评论被证明是非常有用的。问题是操作已经驻留在Rules单子中--而不是相反(对不起,Eric,因为不够具体)。下面的代码是我最终解决的问题。

代码语言:javascript
复制
import Development.Shake
import Development.Shake.Command
import Development.Shake.FilePath
import Development.Shake.Util

main :: IO ()
main = shakeArgs shakeOptions{shakeFiles="_build"} (do
  action $ do dependencies <- getDirectoryFiles "" ["*checker.py"]
              let scripts = map (\file -> "_build" </> file -<.> "sh") dependencies
              need scripts)
票数 1
EN

Stack Overflow用户

发布于 2015-10-28 12:56:35

Action ( getDirectoryFiles返回的内容)似乎是一个Monad,因此您可以使用do-notation:

代码语言:javascript
复制
do
  paths <- getDirectoryFiles "" ["_build//*checkers.sh"]
  want paths

或者只是

代码语言:javascript
复制
getDirectoryFiles "" ["_build//*checkers.sh"] >>= want

代码语言:javascript
复制
want =<< getDirectoryFiles "" ["_build//*checkers.sh"]    

编辑:根据Neil的评论,需要用need代替want

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33389889

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档