sbt 0.13任务宏等效于flatMap

时间:2013-07-26 18:18:57

标签: scala sbt

我正在升级我的构建以尽可能多地使用新的宏语法,并且遇到了flatMap我不知道如何处理。

假设我曾经有过以下形式的任务

myTask <<= (foo, bar) flatMap { (x, y) => someFunctionProducingATask(x, y, 5) }

现在,Def.taskDyn看起来很模糊,但不太适合。把它翻译成天真的东西是行不通的:

myTask <<= Def.taskDyn {
  val x = foo.value
  val y = bar.value
  someFunctionProducingATask(x, y, 5) // ERROR: we need an Initialize[Task[...]], but have a Task[...]
}

Initialize感觉是monadic,但我找不到pure,所以我不知道如何将我的任务放入其中,或者甚至是可取的。除了建议我使用taskDyn之外,文档似乎没有说什么。任何人有任何想法吗?

1 个答案:

答案 0 :(得分:4)

在大多数面向用户的文档中,"task"表示Initialize[Task[T]]。作为构建和插件的"task"通常使用它们实际上是一个值为任务的设置。

someFunctionProducatATask可能应该返回Initialize[Task[T]]

pure的{​​p> InitializeDef.value(接受=> T)或Def.pure(接受() => T)。

但是,通常只需使用Def.task(适用于Initialize[Task[T]])和Def.setting(适用于Initialize[T]。这些语法与:=的参数具有相同的语法, +=++=

相关问题