2010-06-07 14:53:21 +02:00
|
|
|
/* sbt -- Simple Build Tool
|
|
|
|
|
* Copyright 2010 Mark Harrah
|
|
|
|
|
*/
|
|
|
|
|
package sbt
|
|
|
|
|
|
|
|
|
|
import Types._
|
|
|
|
|
import Task._
|
|
|
|
|
import Execute._
|
|
|
|
|
|
|
|
|
|
object Test
|
|
|
|
|
{
|
2010-06-10 14:19:15 +02:00
|
|
|
val a = pure(3)
|
|
|
|
|
val b = pure[Boolean](error("test"))
|
|
|
|
|
val b2 = pure(true)
|
|
|
|
|
val c = pure("asdf")
|
2010-06-25 00:09:07 +02:00
|
|
|
val i3 = a :^: b :^: c :^: KNil
|
|
|
|
|
val i32 = a :^: b2 :^: c :^: KNil
|
2010-06-07 14:53:21 +02:00
|
|
|
|
|
|
|
|
val fh= (_: Int :+: Boolean :+: String :+: HNil) match
|
|
|
|
|
{ case aa :+: bb :+: cc :+: HNil => aa + " " + bb + " " + cc }
|
2010-06-10 14:19:15 +02:00
|
|
|
val h1 = i3 mapH fh
|
|
|
|
|
val h2 = i32 mapH fh
|
2010-06-07 14:53:21 +02:00
|
|
|
|
2010-06-25 00:09:07 +02:00
|
|
|
type Values = Results[i3.Raw]
|
|
|
|
|
|
|
|
|
|
val f: Values => Any = {
|
|
|
|
|
case Value(aa) :^: Value(bb) :^: Value(cc) :^: KNil => aa + " " + bb + " " + cc
|
2010-06-07 14:53:21 +02:00
|
|
|
case x =>
|
|
|
|
|
val cs = x.toList.collect { case Inc(x) => x } // workaround for double definition bug
|
2011-03-23 12:06:51 +01:00
|
|
|
throw Incomplete(None, causes = cs)
|
2010-06-07 14:53:21 +02:00
|
|
|
}
|
2010-06-10 14:19:15 +02:00
|
|
|
val d2 = i32 mapR f
|
2010-06-25 00:09:07 +02:00
|
|
|
val f2: Values => Task[Any] = {
|
|
|
|
|
case Value(aa) :^: Value(bb) :^: Value(cc) :^: KNil => new Pure(() => aa + " " + bb + " " + cc)
|
2010-06-07 14:53:21 +02:00
|
|
|
case x => d3
|
|
|
|
|
}
|
2010-06-10 14:19:15 +02:00
|
|
|
lazy val d = i3 flatMapR f2
|
2010-06-25 00:09:07 +02:00
|
|
|
val f3: Values => Task[Any] = {
|
|
|
|
|
case Value(aa) :^: Value(bb) :^: Value(cc) :^: KNil => new Pure(() => aa + " " + bb + " " + cc)
|
2010-06-07 14:53:21 +02:00
|
|
|
case x => d2
|
|
|
|
|
}
|
2010-06-10 14:19:15 +02:00
|
|
|
lazy val d3= i3 flatMapR f3
|
2010-06-07 14:53:21 +02:00
|
|
|
|
2010-06-25 00:09:07 +02:00
|
|
|
def d4(i: Int): Task[Int] = KNil flatMap { _ => val x = math.random; if(x < 0.01) pure(i); else d4(i+1) }
|
2010-06-07 14:53:21 +02:00
|
|
|
|
|
|
|
|
def go()
|
|
|
|
|
{
|
|
|
|
|
def run[T](root: Task[T]) =
|
2010-06-10 14:19:15 +02:00
|
|
|
println("Result : " + Task.run(root, true, 2))
|
2010-06-07 14:53:21 +02:00
|
|
|
|
|
|
|
|
run(a)
|
|
|
|
|
run(b)
|
|
|
|
|
run(b2)
|
|
|
|
|
run(c)
|
|
|
|
|
run(d)
|
|
|
|
|
run(d2)
|
|
|
|
|
run( d4(0) )
|
|
|
|
|
run(h1)
|
|
|
|
|
run(h2)
|
|
|
|
|
}
|
|
|
|
|
}
|