diff --git a/cp-demo/LazyVars.scala b/cp-demo/LazyVars.scala index 6c13ae0d41b6ff7c2065214a53daa3637ee0422a..d3bab5c3e20d56828e47d8f2b0e0131fb42c0017 100644 --- a/cp-demo/LazyVars.scala +++ b/cp-demo/LazyVars.scala @@ -7,13 +7,7 @@ object LazyVars { def chooseInt(lower: Int, upper: Int) = ((x: Int) => x >= lower && x <= upper).lazyFindAll def main(args: Array[String]): Unit = { - f1() - println - f2() - println - f3() - println - // f5() + f5() } def f1() { @@ -52,18 +46,21 @@ object LazyVars { } def f4() { - val p = ((x: Int, y: Int) => x > 0 && y == 2 * x && x <= 5).lazySolve - val other = ((z: Int) => z == p._1 + p._2).lazySolve + val (x, y) = ((x: Int, y: Int) => x > 0 && y == 2 * x && x <= 5).lazySolve + val other = ((z: Int) => z == x + y).lazySolve println("x + y: " + other.value) - val x = p._1 - val y = p._2 println("x: " + x.value) println("y: " + y.value) } def f5() { val p = ((x: Int, y: Int) => x > 0 && y == 2 * x && x <= 5).lazySolve - val scalaPair: (Int, Int) = p + val scalaPair = p.value println("scala pair: " + scalaPair) } + + def f6() { + val s = ((s: Int) => s > 0 && s < 42).lazySolve + println(s.value) + } } diff --git a/src/cp/Definitions.scala b/src/cp/Definitions.scala index 804104c74edb7c78d4122310a4f760ede3159ad3..97b3b49551bf5155e302f996666788dbbeddd7c6 100644 --- a/src/cp/Definitions.scala +++ b/src/cp/Definitions.scala @@ -25,17 +25,35 @@ object Definitions { l.value } - implicit def forceLTuple[T](ltuple: LTuple[T]): T = ltuple.value - - implicit def ltuple2tuple1[T1](ltuple: LTuple1[T1]): L[T1] = ltuple._1 - implicit def ltuple2tuple2[T1,T2](ltuple: LTuple2[T1,T2]): (L[T1],L[T2]) = (ltuple._1,ltuple._2) - implicit def ltuple2tuple3[T1,T2,T3](ltuple: LTuple3[T1,T2,T3]): (L[T1],L[T2],L[T3]) = (ltuple._1,ltuple._2,ltuple._3) - implicit def ltuple2tuple4[T1,T2,T3,T4](ltuple: LTuple4[T1,T2,T3,T4]): (L[T1],L[T2],L[T3],L[T4]) = (ltuple._1,ltuple._2,ltuple._3,ltuple._4) - implicit def ltuple2tuple5[T1,T2,T3,T4,T5](ltuple: LTuple5[T1,T2,T3,T4,T5]): (L[T1],L[T2],L[T3],L[T4],L[T5]) = (ltuple._1,ltuple._2,ltuple._3,ltuple._4,ltuple._5) - implicit def ltuple2tuple6[T1,T2,T3,T4,T5,T6](ltuple: LTuple6[T1,T2,T3,T4,T5,T6]): (L[T1],L[T2],L[T3],L[T4],L[T5],L[T6]) = (ltuple._1,ltuple._2,ltuple._3,ltuple._4,ltuple._5,ltuple._6) - implicit def ltuple2tuple7[T1,T2,T3,T4,T5,T6,T7](ltuple: LTuple7[T1,T2,T3,T4,T5,T6,T7]): (L[T1],L[T2],L[T3],L[T4],L[T5],L[T6],L[T7]) = (ltuple._1,ltuple._2,ltuple._3,ltuple._4,ltuple._5,ltuple._6,ltuple._7) - implicit def ltuple2tuple8[T1,T2,T3,T4,T5,T6,T7,T8](ltuple: LTuple8[T1,T2,T3,T4,T5,T6,T7,T8]): (L[T1],L[T2],L[T3],L[T4],L[T5],L[T6],L[T7],L[T8]) = (ltuple._1,ltuple._2,ltuple._3,ltuple._4,ltuple._5,ltuple._6,ltuple._7,ltuple._8) - implicit def ltuple2tuple9[T1,T2,T3,T4,T5,T6,T7,T8,T9](ltuple: LTuple9[T1,T2,T3,T4,T5,T6,T7,T8,T9]): (L[T1],L[T2],L[T3],L[T4],L[T5],L[T6],L[T7],L[T8],L[T9]) = (ltuple._1,ltuple._2,ltuple._3,ltuple._4,ltuple._5,ltuple._6,ltuple._7,ltuple._8,ltuple._9) + implicit def forceTupleOfL1[T1](tuple: (L[T1])): (T1) = tuple.value + implicit def forceTupleOfL2[T1,T2](tuple: (L[T1],L[T2])): (T1,T2) = tuple.value + implicit def forceTupleOfL3[T1,T2,T3](tuple: (L[T1],L[T2],L[T3])): (T1,T2,T3) = tuple.value + implicit def forceTupleOfL4[T1,T2,T3,T4](tuple: (L[T1],L[T2],L[T3],L[T4])): (T1,T2,T3,T4) = tuple.value + implicit def forceTupleOfL5[T1,T2,T3,T4,T5](tuple: (L[T1],L[T2],L[T3],L[T4],L[T5])): (T1,T2,T3,T4,T5) = tuple.value + implicit def forceTupleOfL6[T1,T2,T3,T4,T5,T6](tuple: (L[T1],L[T2],L[T3],L[T4],L[T5],L[T6])): (T1,T2,T3,T4,T5,T6) = tuple.value + implicit def forceTupleOfL7[T1,T2,T3,T4,T5,T6,T7](tuple: (L[T1],L[T2],L[T3],L[T4],L[T5],L[T6],L[T7])): (T1,T2,T3,T4,T5,T6,T7) = tuple.value + implicit def forceTupleOfL8[T1,T2,T3,T4,T5,T6,T7,T8](tuple: (L[T1],L[T2],L[T3],L[T4],L[T5],L[T6],L[T7],L[T8])): (T1,T2,T3,T4,T5,T6,T7,T8) = tuple.value + implicit def forceTupleOfL9[T1,T2,T3,T4,T5,T6,T7,T8,T9](tuple: (L[T1],L[T2],L[T3],L[T4],L[T5],L[T6],L[T7],L[T8],L[T9])): (T1,T2,T3,T4,T5,T6,T7,T8,T9) = tuple.value + + // implicit def ltuple2tuple1[T1](ltuple: LTuple1[T1]): L[T1] = ltuple._1 + // implicit def ltuple2tuple2[T1,T2](ltuple: LTuple2[T1,T2]): (L[T1],L[T2]) = (ltuple._1,ltuple._2) + // implicit def ltuple2tuple3[T1,T2,T3](ltuple: LTuple3[T1,T2,T3]): (L[T1],L[T2],L[T3]) = (ltuple._1,ltuple._2,ltuple._3) + // implicit def ltuple2tuple4[T1,T2,T3,T4](ltuple: LTuple4[T1,T2,T3,T4]): (L[T1],L[T2],L[T3],L[T4]) = (ltuple._1,ltuple._2,ltuple._3,ltuple._4) + // implicit def ltuple2tuple5[T1,T2,T3,T4,T5](ltuple: LTuple5[T1,T2,T3,T4,T5]): (L[T1],L[T2],L[T3],L[T4],L[T5]) = (ltuple._1,ltuple._2,ltuple._3,ltuple._4,ltuple._5) + // implicit def ltuple2tuple6[T1,T2,T3,T4,T5,T6](ltuple: LTuple6[T1,T2,T3,T4,T5,T6]): (L[T1],L[T2],L[T3],L[T4],L[T5],L[T6]) = (ltuple._1,ltuple._2,ltuple._3,ltuple._4,ltuple._5,ltuple._6) + // implicit def ltuple2tuple7[T1,T2,T3,T4,T5,T6,T7](ltuple: LTuple7[T1,T2,T3,T4,T5,T6,T7]): (L[T1],L[T2],L[T3],L[T4],L[T5],L[T6],L[T7]) = (ltuple._1,ltuple._2,ltuple._3,ltuple._4,ltuple._5,ltuple._6,ltuple._7) + // implicit def ltuple2tuple8[T1,T2,T3,T4,T5,T6,T7,T8](ltuple: LTuple8[T1,T2,T3,T4,T5,T6,T7,T8]): (L[T1],L[T2],L[T3],L[T4],L[T5],L[T6],L[T7],L[T8]) = (ltuple._1,ltuple._2,ltuple._3,ltuple._4,ltuple._5,ltuple._6,ltuple._7,ltuple._8) + // implicit def ltuple2tuple9[T1,T2,T3,T4,T5,T6,T7,T8,T9](ltuple: LTuple9[T1,T2,T3,T4,T5,T6,T7,T8,T9]): (L[T1],L[T2],L[T3],L[T4],L[T5],L[T6],L[T7],L[T8],L[T9]) = (ltuple._1,ltuple._2,ltuple._3,ltuple._4,ltuple._5,ltuple._6,ltuple._7,ltuple._8,ltuple._9) + + implicit def tupleOfL2lTuple1[T1](lt: L[T1]): LTuple1[T1] = new LTuple1(lt) + implicit def tupleOfL2lTuple2[T1,T2](lt: (L[T1],L[T2])): LTuple2[T1,T2] = new LTuple2(lt._1,lt._2) + implicit def tupleOfL2lTuple3[T1,T2,T3](lt: (L[T1],L[T2],L[T3])): LTuple3[T1,T2,T3] = new LTuple3(lt._1,lt._2,lt._3) + implicit def tupleOfL2lTuple4[T1,T2,T3,T4](lt: (L[T1],L[T2],L[T3],L[T4])): LTuple4[T1,T2,T3,T4] = new LTuple4(lt._1,lt._2,lt._3,lt._4) + implicit def tupleOfL2lTuple5[T1,T2,T3,T4,T5](lt: (L[T1],L[T2],L[T3],L[T4],L[T5])): LTuple5[T1,T2,T3,T4,T5] = new LTuple5(lt._1,lt._2,lt._3,lt._4,lt._5) + implicit def tupleOfL2lTuple6[T1,T2,T3,T4,T5,T6](lt: (L[T1],L[T2],L[T3],L[T4],L[T5],L[T6])): LTuple6[T1,T2,T3,T4,T5,T6] = new LTuple6(lt._1,lt._2,lt._3,lt._4,lt._5,lt._6) + implicit def tupleOfL2lTuple7[T1,T2,T3,T4,T5,T6,T7](lt: (L[T1],L[T2],L[T3],L[T4],L[T5],L[T6],L[T7])): LTuple7[T1,T2,T3,T4,T5,T6,T7] = new LTuple7(lt._1,lt._2,lt._3,lt._4,lt._5,lt._6,lt._7) + implicit def tupleOfL2lTuple8[T1,T2,T3,T4,T5,T6,T7,T8](lt: (L[T1],L[T2],L[T3],L[T4],L[T5],L[T6],L[T7],L[T8])): LTuple8[T1,T2,T3,T4,T5,T6,T7,T8] = new LTuple8(lt._1,lt._2,lt._3,lt._4,lt._5,lt._6,lt._7,lt._8) + implicit def tupleOfL2lTuple9[T1,T2,T3,T4,T5,T6,T7,T8,T9](lt: (L[T1],L[T2],L[T3],L[T4],L[T5],L[T6],L[T7],L[T8],L[T9])): LTuple9[T1,T2,T3,T4,T5,T6,T7,T8,T9] = new LTuple9(lt._1,lt._2,lt._3,lt._4,lt._5,lt._6,lt._7,lt._8,lt._9) def distinct[A](args: A*) : Boolean = { args.toList.distinct.size == args.size diff --git a/src/cp/Terms.scala b/src/cp/Terms.scala index 82924f6c12ff3fea657d0097ab68a768f12aee81..4c907dc417fccdfd9765cb1c54de439d3d6c9c54 100644 --- a/src/cp/Terms.scala +++ b/src/cp/Terms.scala @@ -35,19 +35,6 @@ object Terms { findAllExprSeq(asConstraint(this)).map(convertingFunction(_)) } - def lazySolve(implicit asConstraint: (Term[T,R]) => Constraint[T]): LTuple[T] = { - throw new Exception() - } - - def lazyFind(implicit asConstraint: (Term[T,R]) => Term[T,Boolean]): Option[LTuple[T]] = { - try { - Some(this.lazySolve) - } catch { - case e: UnsatisfiableConstraintException => None - case e: UnknownConstraintException => None - } - } - def lazyFindAll(implicit asConstraint: (Term[T,R]) => Constraint[T]): LIterator[T] = { new LIterator((l: L[T]) => asConstraint(this)) } @@ -193,13 +180,11 @@ object Terms { MinConstraint1[T1](asConstraint(this), minFunc) } - def lazySolve(implicit asConstraint: (Term1[T1,R]) => Constraint1[T1]): LTuple1[T1] = { + def lazySolve(implicit asConstraint: (Term1[T1,R]) => Constraint1[T1]): (L[T1]) = { val constraint = asConstraint(this) val (constants, guards) = constantsAndGuards(constraint) - new LTuple1[T1](createL[T1](constraint, constants(0), guards(0))) + (createL[T1](constraint, constants(0), guards(0))) } - - // def lazyFindAll(implicit asConstraint: (Term1[T1,R]) => Constraint1[T1]): LStream def compose0[A1](other : Term1[A1, T1]) : Term1[A1, R] = { val (newExpr, newTypes) = Terms.compose(other, this, 0, 1, 1) @@ -268,10 +253,10 @@ object Terms { MinConstraint2[T1,T2](asConstraint(this), minFunc) } - def lazySolve(implicit asConstraint: (Term2[T1,T2,R]) => Constraint2[T1,T2]): LTuple2[T1,T2] = { + def lazySolve(implicit asConstraint: (Term2[T1,T2,R]) => Constraint2[T1,T2]): (L[T1],L[T2]) = { val constraint = asConstraint(this) val (constants, guards) = constantsAndGuards(constraint) - new LTuple2[T1,T2](createL[T1](constraint, constants(0), guards(0)),createL[T2](constraint, constants(1), guards(1))) + (createL[T1](constraint, constants(0), guards(0)),createL[T2](constraint, constants(1), guards(1))) } def compose0[A1](other : Term1[A1, T1]) : Term2[A1, T2, R] = { @@ -376,10 +361,10 @@ object Terms { MinConstraint3[T1,T2,T3](asConstraint(this), minFunc) } - def lazySolve(implicit asConstraint: (Term3[T1,T2,T3,R]) => Constraint3[T1,T2,T3]): LTuple3[T1,T2,T3] = { + def lazySolve(implicit asConstraint: (Term3[T1,T2,T3,R]) => Constraint3[T1,T2,T3]): (L[T1],L[T2],L[T3]) = { val constraint = asConstraint(this) val (constants, guards) = constantsAndGuards(constraint) - new LTuple3[T1,T2,T3](createL[T1](constraint, constants(0), guards(0)),createL[T2](constraint, constants(1), guards(1)),createL[T3](constraint, constants(2), guards(2))) + (createL[T1](constraint, constants(0), guards(0)),createL[T2](constraint, constants(1), guards(1)),createL[T3](constraint, constants(2), guards(2))) } def compose0[A1](other : Term1[A1, T1]) : Term3[A1, T2, T3, R] = { @@ -509,10 +494,10 @@ object Terms { MinConstraint4[T1,T2,T3,T4](asConstraint(this), minFunc) } - def lazySolve(implicit asConstraint: (Term4[T1,T2,T3,T4,R]) => Constraint4[T1,T2,T3,T4]): LTuple4[T1,T2,T3,T4] = { + def lazySolve(implicit asConstraint: (Term4[T1,T2,T3,T4,R]) => Constraint4[T1,T2,T3,T4]): (L[T1],L[T2],L[T3],L[T4]) = { val constraint = asConstraint(this) val (constants, guards) = constantsAndGuards(constraint) - new LTuple4[T1,T2,T3,T4](createL[T1](constraint, constants(0), guards(0)),createL[T2](constraint, constants(1), guards(1)),createL[T3](constraint, constants(2), guards(2)),createL[T4](constraint, constants(3), guards(3))) + (createL[T1](constraint, constants(0), guards(0)),createL[T2](constraint, constants(1), guards(1)),createL[T3](constraint, constants(2), guards(2)),createL[T4](constraint, constants(3), guards(3))) } def compose0[A1](other : Term1[A1, T1]) : Term4[A1, T2, T3, T4, R] = { @@ -657,10 +642,10 @@ object Terms { MinConstraint5[T1,T2,T3,T4,T5](asConstraint(this), minFunc) } - def lazySolve(implicit asConstraint: (Term5[T1,T2,T3,T4,T5,R]) => Constraint5[T1,T2,T3,T4,T5]): LTuple5[T1,T2,T3,T4,T5] = { + def lazySolve(implicit asConstraint: (Term5[T1,T2,T3,T4,T5,R]) => Constraint5[T1,T2,T3,T4,T5]): (L[T1],L[T2],L[T3],L[T4],L[T5]) = { val constraint = asConstraint(this) val (constants, guards) = constantsAndGuards(constraint) - new LTuple5[T1,T2,T3,T4,T5](createL[T1](constraint, constants(0), guards(0)),createL[T2](constraint, constants(1), guards(1)),createL[T3](constraint, constants(2), guards(2)),createL[T4](constraint, constants(3), guards(3)),createL[T5](constraint, constants(4), guards(4))) + (createL[T1](constraint, constants(0), guards(0)),createL[T2](constraint, constants(1), guards(1)),createL[T3](constraint, constants(2), guards(2)),createL[T4](constraint, constants(3), guards(3)),createL[T5](constraint, constants(4), guards(4))) } def compose0[A1](other : Term1[A1, T1]) : Term5[A1, T2, T3, T4, T5, R] = { @@ -810,10 +795,10 @@ object Terms { MinConstraint6[T1,T2,T3,T4,T5,T6](asConstraint(this), minFunc) } - def lazySolve(implicit asConstraint: (Term6[T1,T2,T3,T4,T5,T6,R]) => Constraint6[T1,T2,T3,T4,T5,T6]): LTuple6[T1,T2,T3,T4,T5,T6] = { + def lazySolve(implicit asConstraint: (Term6[T1,T2,T3,T4,T5,T6,R]) => Constraint6[T1,T2,T3,T4,T5,T6]): (L[T1],L[T2],L[T3],L[T4],L[T5],L[T6]) = { val constraint = asConstraint(this) val (constants, guards) = constantsAndGuards(constraint) - new LTuple6[T1,T2,T3,T4,T5,T6](createL[T1](constraint, constants(0), guards(0)),createL[T2](constraint, constants(1), guards(1)),createL[T3](constraint, constants(2), guards(2)),createL[T4](constraint, constants(3), guards(3)),createL[T5](constraint, constants(4), guards(4)),createL[T6](constraint, constants(5), guards(5))) + (createL[T1](constraint, constants(0), guards(0)),createL[T2](constraint, constants(1), guards(1)),createL[T3](constraint, constants(2), guards(2)),createL[T4](constraint, constants(3), guards(3)),createL[T5](constraint, constants(4), guards(4)),createL[T6](constraint, constants(5), guards(5))) } def compose0[A1](other : Term1[A1, T1]) : Term6[A1, T2, T3, T4, T5, T6, R] = { @@ -958,10 +943,10 @@ object Terms { MinConstraint7[T1,T2,T3,T4,T5,T6,T7](asConstraint(this), minFunc) } - def lazySolve(implicit asConstraint: (Term7[T1,T2,T3,T4,T5,T6,T7,R]) => Constraint7[T1,T2,T3,T4,T5,T6,T7]): LTuple7[T1,T2,T3,T4,T5,T6,T7] = { + def lazySolve(implicit asConstraint: (Term7[T1,T2,T3,T4,T5,T6,T7,R]) => Constraint7[T1,T2,T3,T4,T5,T6,T7]): (L[T1],L[T2],L[T3],L[T4],L[T5],L[T6],L[T7]) = { val constraint = asConstraint(this) val (constants, guards) = constantsAndGuards(constraint) - new LTuple7[T1,T2,T3,T4,T5,T6,T7](createL[T1](constraint, constants(0), guards(0)),createL[T2](constraint, constants(1), guards(1)),createL[T3](constraint, constants(2), guards(2)),createL[T4](constraint, constants(3), guards(3)),createL[T5](constraint, constants(4), guards(4)),createL[T6](constraint, constants(5), guards(5)),createL[T7](constraint, constants(6), guards(6))) + (createL[T1](constraint, constants(0), guards(0)),createL[T2](constraint, constants(1), guards(1)),createL[T3](constraint, constants(2), guards(2)),createL[T4](constraint, constants(3), guards(3)),createL[T5](constraint, constants(4), guards(4)),createL[T6](constraint, constants(5), guards(5)),createL[T7](constraint, constants(6), guards(6))) } def compose0[A1](other : Term1[A1, T1]) : Term7[A1, T2, T3, T4, T5, T6, T7, R] = { @@ -1091,10 +1076,10 @@ object Terms { MinConstraint8[T1,T2,T3,T4,T5,T6,T7,T8](asConstraint(this), minFunc) } - def lazySolve(implicit asConstraint: (Term8[T1,T2,T3,T4,T5,T6,T7,T8,R]) => Constraint8[T1,T2,T3,T4,T5,T6,T7,T8]): LTuple8[T1,T2,T3,T4,T5,T6,T7,T8] = { + def lazySolve(implicit asConstraint: (Term8[T1,T2,T3,T4,T5,T6,T7,T8,R]) => Constraint8[T1,T2,T3,T4,T5,T6,T7,T8]): (L[T1],L[T2],L[T3],L[T4],L[T5],L[T6],L[T7],L[T8]) = { val constraint = asConstraint(this) val (constants, guards) = constantsAndGuards(constraint) - new LTuple8[T1,T2,T3,T4,T5,T6,T7,T8](createL[T1](constraint, constants(0), guards(0)),createL[T2](constraint, constants(1), guards(1)),createL[T3](constraint, constants(2), guards(2)),createL[T4](constraint, constants(3), guards(3)),createL[T5](constraint, constants(4), guards(4)),createL[T6](constraint, constants(5), guards(5)),createL[T7](constraint, constants(6), guards(6)),createL[T8](constraint, constants(7), guards(7))) + (createL[T1](constraint, constants(0), guards(0)),createL[T2](constraint, constants(1), guards(1)),createL[T3](constraint, constants(2), guards(2)),createL[T4](constraint, constants(3), guards(3)),createL[T5](constraint, constants(4), guards(4)),createL[T6](constraint, constants(5), guards(5)),createL[T7](constraint, constants(6), guards(6)),createL[T8](constraint, constants(7), guards(7))) } def compose0[A1](other : Term1[A1, T1]) : Term8[A1, T2, T3, T4, T5, T6, T7, T8, R] = { @@ -1199,10 +1184,10 @@ object Terms { MinConstraint9[T1,T2,T3,T4,T5,T6,T7,T8,T9](asConstraint(this), minFunc) } - def lazySolve(implicit asConstraint: (Term9[T1,T2,T3,T4,T5,T6,T7,T8,T9,R]) => Constraint9[T1,T2,T3,T4,T5,T6,T7,T8,T9]): LTuple9[T1,T2,T3,T4,T5,T6,T7,T8,T9] = { + def lazySolve(implicit asConstraint: (Term9[T1,T2,T3,T4,T5,T6,T7,T8,T9,R]) => Constraint9[T1,T2,T3,T4,T5,T6,T7,T8,T9]): (L[T1],L[T2],L[T3],L[T4],L[T5],L[T6],L[T7],L[T8],L[T9]) = { val constraint = asConstraint(this) val (constants, guards) = constantsAndGuards(constraint) - new LTuple9[T1,T2,T3,T4,T5,T6,T7,T8,T9](createL[T1](constraint, constants(0), guards(0)),createL[T2](constraint, constants(1), guards(1)),createL[T3](constraint, constants(2), guards(2)),createL[T4](constraint, constants(3), guards(3)),createL[T5](constraint, constants(4), guards(4)),createL[T6](constraint, constants(5), guards(5)),createL[T7](constraint, constants(6), guards(6)),createL[T8](constraint, constants(7), guards(7)),createL[T9](constraint, constants(8), guards(8))) + (createL[T1](constraint, constants(0), guards(0)),createL[T2](constraint, constants(1), guards(1)),createL[T3](constraint, constants(2), guards(2)),createL[T4](constraint, constants(3), guards(3)),createL[T5](constraint, constants(4), guards(4)),createL[T6](constraint, constants(5), guards(5)),createL[T7](constraint, constants(6), guards(6)),createL[T8](constraint, constants(7), guards(7)),createL[T9](constraint, constants(8), guards(8))) } def compose0[A1](other : Term1[A1, T1]) : Term9[A1, T2, T3, T4, T5, T6, T7, T8, T9, R] = { diff --git a/src/cp/Utils.scala b/src/cp/Utils.scala index 085c38dbdefbc9ca3edac656f58d3d9d4b35d2d9..2cb8f3b9a6961c472ecced96e01c0600d0cf03c3 100644 --- a/src/cp/Utils.scala +++ b/src/cp/Utils.scala @@ -35,12 +35,14 @@ object Utils { val createLCalls = (1 to arity) map (i => """createL[T%d](constraint, constants(%d), guards(%d))""" format (i, i - 1, i - 1)) val createLCallsString = createLCalls.mkString(",") + val lvarTypes = traitArgParams map ("L[" + _ + "]") + val lvarTypeString = lvarTypes.mkString(",") val lazySolveMethod = -"""def lazySolve(implicit asConstraint: (%s) => Constraint%d[%s]): LTuple%d[%s] = { +"""def lazySolve(implicit asConstraint: (%s) => Constraint%d[%s]): (%s) = { val constraint = asConstraint(this) val (constants, guards) = constantsAndGuards(constraint) - new LTuple%d[%s](%s) -}""" format (traitName, arity, traitArgParamsString, arity, traitArgParamsString, arity, traitArgParamsString, createLCallsString) + (%s) +}""" format (traitName, arity, traitArgParamsString, lvarTypeString, createLCallsString) val composeMethods = (for (arityF <- 1 to (maxArity - arity + 1)) yield { for (index <- 0 until arity) yield { @@ -237,7 +239,7 @@ object Utils { val ltupleClasses = GenerateLTuples(args(0).toInt) val everything = Seq(typeAliases, termTraits, termObjects, minConstraintsClasses).mkString("\n\n") - // println(indent(everything)) - println(indent(ltupleClasses)) + println(indent(everything)) + // println(indent(ltupleClasses)) } }