oli*_*ver 15 git scripting haskell
正如别处指出多次(例如,1,2,...)在Haskell脚本可以说是相当强大的.
快速方法也可以是ghc表达式评估模式.这就是我实际上发现自己越来越多地使用(我真的很喜欢ruby中的这个功能).
一个小例子任务:
"找出包含HEAD和特定修订版之间的git差异的所有文件夹"
git diff --stat 9e2b68 | ghc -e \
"getContents >>= return.(Data.List.nub).map(fst.break('/'==).head.words).lines"
Run Code Online (Sandbox Code Playgroud)
这看起来有点笨重,可能是因为我真的不知道使用的细节ghc -e.
鉴于所有有趣的部分只是nub.map(fst.break('/'==).head.words).lines实际的表达似乎有点罗嗦.
我真的很感激从其他用例中看到一些例子,这些例子将有助于我改进我对这些小脚本使用haskell的方式!
旁注:Commandline-foo向导可能会对此嗤之以鼻,但我觉得使用haskell然后使用bash脚本更加舒服,所以这就是我想要使用的内容.
就像FunctorSalad所说的那样,ghc -e加载~/.ghci 它可以使用它来添加你可能在脚本中使用的任何样板.在你的情况下你可以添加
let script f = getContents >>= return f
import Data.List
Run Code Online (Sandbox Code Playgroud)
给你~/.ghci文件,然后运行:
git diff ... | ghc -e "script.nub.map(fst.break(=='/').head.words).lines"
Run Code Online (Sandbox Code Playgroud)
除了.ghci文件的标准配置(除了你的全局〜/ .ghci,你可以在某些目录中有专门的.ghci文件,然后在那之前读取),你也可以传递一个Haskell源文件作为命令行参数ghc -e "expression" path/to/Source.hs.expression然后将在上下文中进行评估module Source.