如果我想声明一个newtype类型的类型被约束为具有类型类的实例,我似乎可以这样做:
{-# LANGUAGE RankNTypes #-}
newtype ShowBox = ShowBox (forall a. Show a => a)
Run Code Online (Sandbox Code Playgroud)
GHC编译就好了,但是当我尝试并实际使用ShowBox时
ShowBox "hello"
Run Code Online (Sandbox Code Playgroud)
我收到编译器错误
<interactive>:1:18:
Could not deduce (a ~ [Char])
from the context (Show a)
bound by a type expected by the context: Show a => a
at <interactive>:1:10-24
`a' is a rigid type variable bound by
a type expected by the context: Show a => a at <interactive>:1:10
In the first argument of `ShowBox', namely `"hello"'
In the expression: …Run Code Online (Sandbox Code Playgroud) 我已经添加了-Xlinter和-Ywarn-unused-importscalac标志,以我的一个项目.问题是我正在使用源生成器并且它创建的代码不能通过所有检查 - 有死代码和未使用的导入警告.有没有办法让我有一套不同的scalacOptions托管代码和非托管代码?
我有一堆看起来完全相同的数据存储类型.
trait FooStore[C] {
def create(f: FooId => Foo)(c: C): Foo
// update and find methods
}
Run Code Online (Sandbox Code Playgroud)
我想简化一些事情,并希望使用依赖方法类型来获得更接近的东西
sealed trait AR {
type Id
type Type
}
sealed trait FooAR extends AR {
type Id = FooId
type Type = Foo
}
trait DataStore[C] {
def create(ar: AR)(f: ar.Id => ar.Type)(c: C): ar.Type
}
Run Code Online (Sandbox Code Playgroud)
但是当我尝试创建一个如下的实例时
case class InMemory(foos: List[Foo])
object InMemory {
lazy val InMemoryDataStore: DataStore[InMemory] = new DataStore[InMemory] {
def create(ar: AR)(f: ar.Id => ar.Type)(c: InMemory): ar.Type = sys.error("not …Run Code Online (Sandbox Code Playgroud) 我正在尝试构建一个自定义任务,用于在我们的持续集成环境中构建项目.这是一系列的步骤
请注意,如果任何步骤失败,则应该执行步骤10,并且应根据哪个步骤失败来自定义消息,例如,如果步骤5失败,则应说"编译失败",如果步骤8失败,则应说明运行了多少测试并且多少失败了.
为了使事情更有趣,这是一个多项目构建,因此在运行测试和发布结果时,它应该运行所有测试并发布聚合结果.
为了使事情变得更有趣,npm测试,jshint和工件只webapp在Javascript存在且Web服务器所在的子项目中才有意义.
我一直在寻找sbt-release的灵感,但我在如何获取一个任务产生的值并在下一个任务中使用它,如何在聚合中运行任务并获得生成的值(我看到一个方法Extracted来运行集中的任务,但它并没有给生产值),如何在一个子项目运行任务,并获得生产价值,以及如何做错误处理.
到目前为止,我尝试了两种方法
npmTest.result.value match {
case Inc(inc) =>
println(inc)
case Value(res) => Def.taskDyn {
(executeTests in Test).result.value match {
case Inc(inc) =>
println(inc)
case Value(res) =>
println(res)
}
}
Run Code Online (Sandbox Code Playgroud)
上述问题是executeTests即使npmTest失败也始终运行.并且没有一个println被执行.
npmTest.result.
flatMap {-
case Inc(inc) =>
task { println(inc) }
case Value(res) =>-
(executeTests in Test).result.
flatMap {
case Inc(inc) =>
task { println(inc) }
case …Run Code Online (Sandbox Code Playgroud) 我正在尝试foldTerm从Scala中的数据类型ala Carte编写函数.这是我到目前为止所得到的
def foldTerm[F[+_], A, B](e: Free[F, A], pure: A ? B, imp: F[B] ? B)(implicit F: Functor[F]): B =
e.resume match {
case Right(a) ? pure(a)
case Left(x) ? imp(F.map(x)(foldTerm(_, pure, imp)))
}
Run Code Online (Sandbox Code Playgroud)
这可行,但由于Scala无法正确优化尾递归,因此会导致SOE.我试图解决它,Trampoline但到目前为止还没有运气.我觉得我应该能够用现有的方法做到这一点,Free但我的所有尝试都以失败告终.
我错过了什么?