这个问题涉及到sbt 0.13从此承诺到KLists的实现。我想复制这种行为,因为KList实现改变了,它不再工作了。
原因是,目前,sbt只允许最多11个依赖项,如果您将它们分组在一个元组中。我听说为什么它不允许更多的使用,这对性能有影响,所以我正在寻找一种替代使用元组并在其上调用RichTaskables.map的方法,并且我正在考虑使用KLists作为这种选择。
编辑:以前,我想知道如何将klist转换为KL[M[_]]类型,这是Def.app和AList.klist所期望的(后者是前者所需要的)。然后,我意识到可以通过以下方式将KList实例变成表单KL[M[_]]的类型构造函数
M (正如Mark在他的回答中所指出的那样),或者kl的kl类型。我尝试过使用kl.Transform,如果所有依赖项都是设置或任务,它就能工作,但是如果它们是混合的,它就不会直接编译。
有了这些资料,我的问题仍然是:
如何将一些SettingKey & TaskKey依赖项写成KList,并使用Def.app来映射它们的值呢?,我提到Def.app,因为它不知道更好、更高级别的方法。
发布于 2014-01-06 13:24:01
我已经想出了one的工作方式,但我觉得应该比这更优雅。回到我想要复制的示例,具有相同行为的新代码如下所示:
lazy val yodawg = TaskKey[String]("yo-dawg", "I heard you liked settings, so I put a setting in your setting")
val kl = moduleName :^: version :^: isSnapshot :^: KNil
yodawg <<= Def.app(kl: kl.type#Transform[Def.Initialize]) {
case a :^: b :^: c :^: KNil => task(List(a, b, c).mkString("~"))
}(AList.klist)但是:
AList.klist (可能是预期的,它似乎没有被定义为任何地方的隐式)Transform内部类型,这应该是klist的实现细节。此外,我也被迫用Def.Initialize实例化它。或者,我可以在方括号中提供类型,但看起来如下:
Def.app[kl.type#Transform, Task[String]](kl) { ... }
// ^~~~~~~~~~~~在这里,我还必须提供我正在定义的这个设置的内部类型。
发布于 2014-01-06 14:11:01
Def.app、AList和相关代码绝对不打算手动使用。用例是什么?
要回答这个问题,您要寻找的类似klist的类型构造函数是:
type KSS[M[_]] = KCons[String, KCons[String, KNil, M], M]与原始的KList一样,它对应用于每个元素的类型构造函数M进行抽象。特别是,在示例中,它不应该应用于像SettingKey这样的类型构造函数。
https://stackoverflow.com/questions/20950743
复制相似问题