Created
October 7, 2013 04:59
-
-
Save xuwei-k/6862748 to your computer and use it in GitHub Desktop.
Scalac bug ?
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
error] (run-main) java.lang.ClassCastException: Main$$anonfun$1 cannot be cast to java.lang.Integer | |
java.lang.ClassCastException: Main$$anonfun$1 cannot be cast to java.lang.Integer | |
at scala.runtime.BoxesRunTime.unboxToInt(BoxesRunTime.java:106) | |
at scala.Function0$class.apply$mcI$sp(Function0.scala:40) | |
at scala.runtime.AbstractFunction0.apply$mcI$sp(AbstractFunction0.scala:12) | |
at Main$$anonfun$5.apply(LazyEither.scala:21) | |
at Main$$anonfun$5.apply(LazyEither.scala:21) | |
at LazyEither$class.fold(LazyEither.scala:5) | |
at LazyRight.fold(LazyEither.scala:15) | |
at Main$delayedInit$body.apply(LazyEither.scala:21) | |
at scala.Function0$class.apply$mcV$sp(Function0.scala:40) | |
at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:12) | |
at scala.App$$anonfun$main$1.apply(App.scala:71) | |
at scala.App$$anonfun$main$1.apply(App.scala:71) | |
at scala.collection.immutable.List.foreach(List.scala:318) | |
at scala.collection.generic.TraversableForwarder$class.foreach(TraversableForwarder.scala:32) | |
at scala.App$class.main(App.scala:71) | |
at Main$.main(LazyEither.scala:19) | |
at Main.main(LazyEither.scala) | |
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) | |
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) | |
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) | |
at java.lang.reflect.Method.invoke(Method.java:606) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
exception when traversing ((x: => Int) => scala.this.Predef.identity[=> Int](x)) | |
exception when traversing { | |
((x: => Int) => scala.this.Predef.identity[=> Int](x)) | |
} | |
exception when traversing Main.this.x.bimap[() => Int, () => Int]({ | |
((x: => Int) => scala.this.Predef.identity[=> Int](x)) | |
}, { | |
((x: => Int) => scala.this.Predef.identity[=> Int](x)) | |
}) | |
exception when traversing Main.this.x.bimap[() => Int, () => Int]({ | |
((x: => Int) => scala.this.Predef.identity[=> Int](x)) | |
}, { | |
((x: => Int) => scala.this.Predef.identity[=> Int](x)) | |
}).fold | |
exception when traversing Main.this.x.bimap[() => Int, () => Int]({ | |
((x: => Int) => scala.this.Predef.identity[=> Int](x)) | |
}, { | |
((x: => Int) => scala.this.Predef.identity[=> Int](x)) | |
}).fold[Int] | |
exception when traversing Main.this.x.bimap[() => Int, () => Int]({ | |
((x: => Int) => scala.this.Predef.identity[=> Int](x)) | |
}, { | |
((x: => Int) => scala.this.Predef.identity[=> Int](x)) | |
}).fold[Int](((x: => => Int) => x), ((x: => => Int) => x)) | |
exception when traversing java.lang.Object with App with ScalaObject { | |
def this(): object Main = { | |
Main.super.this(); | |
() | |
}; | |
private[this] val x: LazyEither[Int,Int] = new LazyRight[Int]((() => 1)); | |
<stable> <accessor> def x: LazyEither[Int,Int] = Main.this.x; | |
Main.this.x.bimap[Int, Int](((x: () => Int) => x), ((x: () => Int) => x)).fold[Int](((x: () => Int) => x), ((x: () => Int) => x)); | |
Main.this.x.bimap[() => Int, () => Int]({ | |
((x: => Int) => scala.this.Predef.identity[=> Int](x)) | |
}, { | |
((x: => Int) => scala.this.Predef.identity[=> Int](x)) | |
}).fold[Int](((x: => => Int) => x), ((x: => => Int) => x)) | |
} | |
exception when traversing final object Main extends java.lang.Object with App with ScalaObject { | |
def this(): object Main = { | |
Main.super.this(); | |
() | |
}; | |
private[this] val x: LazyEither[Int,Int] = new LazyRight[Int]((() => 1)); | |
<stable> <accessor> def x: LazyEither[Int,Int] = Main.this.x; | |
Main.this.x.bimap[Int, Int](((x: () => Int) => x), ((x: () => Int) => x)).fold[Int](((x: () => Int) => x), ((x: () => Int) => x)); | |
Main.this.x.bimap[() => Int, () => Int]({ | |
((x: => Int) => scala.this.Predef.identity[=> Int](x)) | |
}, { | |
((x: => Int) => scala.this.Predef.identity[=> Int](x)) | |
}).fold[Int](((x: => => Int) => x), ((x: => => Int) => x)) | |
} | |
exception when traversing package <empty> { | |
sealed abstract trait LazyEither[A >: Nothing <: Any, B >: Nothing <: Any] extends java.lang.Object with ScalaObject { | |
def /*LazyEither*/$init$(): Unit = { | |
() | |
}; | |
def fold[X >: Nothing <: Any](left: (() => A) => X, right: (() => B) => X): X = this match { | |
case (f: () => A)LazyLeft[A]((l @ _)) => left.apply(l.apply()) | |
case (f: () => B)LazyRight[B]((r @ _)) => right.apply(r.apply()) | |
}; | |
def bimap[C >: Nothing <: Any, D >: Nothing <: Any](left: (() => A) => C, right: (() => B) => D): LazyEither[C,D] = this match { | |
case (f: () => A)LazyLeft[A]((l @ _)) => new LazyLeft[C]((() => left.apply(l.apply()))) | |
case (f: () => B)LazyRight[B]((r @ _)) => new LazyRight[D]((() => right.apply(r.apply()))) | |
} | |
}; | |
final case class LazyRight[B >: Nothing <: Any] extends java.lang.Object with LazyEither[Nothing,B] with ScalaObject with Product with Serializable { | |
<caseaccessor> <paramaccessor> private[this] val f: () => B = _; | |
<stable> <caseaccessor> <accessor> <paramaccessor> def f: () => B = LazyRight.this.f; | |
def this(f: () => B): LazyRight[B] = { | |
LazyRight.super.this(); | |
() | |
}; | |
<synthetic> def copy[B >: Nothing <: Any](f: () => B = f): LazyRight[B] = new LazyRight[B](f); | |
<synthetic> def copy$default$1[B >: Nothing <: Any]: () => B @scala.annotation.unchecked.uncheckedVariance = LazyRight.this.f; | |
override def hashCode(): Int = ScalaRunTime.this._hashCode(LazyRight.this); | |
override def toString(): String = ScalaRunTime.this._toString(LazyRight.this); | |
override def equals(x$1: Any): Boolean = LazyRight.this.eq(x$1.asInstanceOf[java.lang.Object]).||(x$1 match { | |
case (f: () => Any)LazyRight[Any]((f$1 @ _)) if f$1.==(f) => x$1.asInstanceOf[LazyRight[B]].canEqual(LazyRight.this) | |
case _ => false | |
}); | |
override def productPrefix: java.lang.String = "LazyRight"; | |
override def productArity: Int = 1; | |
override def productElement(x$1: Int): Any = x$1 match { | |
case 0 => f | |
case _ => throw new java.lang.IndexOutOfBoundsException(x$1.toString()) | |
}; | |
override def canEqual(x$1: Any): Boolean = x$1.$isInstanceOf[LazyRight[B]]() | |
}; | |
final <synthetic> object LazyRight extends java.lang.Object with ScalaObject with Serializable { | |
def this(): object LazyRight = { | |
LazyRight.super.this(); | |
() | |
}; | |
final override def toString(): java.lang.String = "LazyRight"; | |
case <synthetic> def unapply[B >: Nothing <: Any](x$0: LazyRight[B]): Option[() => B] = if (x$0.==(null)) | |
scala.this.None | |
else | |
new Some[() => B](x$0.f); | |
case <synthetic> def apply[B >: Nothing <: Any](f: () => B): LazyRight[B] = new LazyRight[B](f); | |
protected def readResolve(): java.lang.Object = LazyRight | |
}; | |
final case class LazyLeft[A >: Nothing <: Any] extends java.lang.Object with LazyEither[A,Nothing] with ScalaObject with Product with Serializable { | |
<caseaccessor> <paramaccessor> private[this] val f: () => A = _; | |
<stable> <caseaccessor> <accessor> <paramaccessor> def f: () => A = LazyLeft.this.f; | |
def this(f: () => A): LazyLeft[A] = { | |
LazyLeft.super.this(); | |
() | |
}; | |
<synthetic> def copy[A >: Nothing <: Any](f: () => A = f): LazyLeft[A] = new LazyLeft[A](f); | |
<synthetic> def copy$default$1[A >: Nothing <: Any]: () => A @scala.annotation.unchecked.uncheckedVariance = LazyLeft.this.f; | |
override def hashCode(): Int = ScalaRunTime.this._hashCode(LazyLeft.this); | |
override def toString(): String = ScalaRunTime.this._toString(LazyLeft.this); | |
override def equals(x$1: Any): Boolean = LazyLeft.this.eq(x$1.asInstanceOf[java.lang.Object]).||(x$1 match { | |
case (f: () => Any)LazyLeft[Any]((f$2 @ _)) if f$2.==(f) => x$1.asInstanceOf[LazyLeft[A]].canEqual(LazyLeft.this) | |
case _ => false | |
}); | |
override def productPrefix: java.lang.String = "LazyLeft"; | |
override def productArity: Int = 1; | |
override def productElement(x$1: Int): Any = x$1 match { | |
case 0 => f | |
case _ => throw new java.lang.IndexOutOfBoundsException(x$1.toString()) | |
}; | |
override def canEqual(x$1: Any): Boolean = x$1.$isInstanceOf[LazyLeft[A]]() | |
}; | |
final <synthetic> object LazyLeft extends java.lang.Object with ScalaObject with Serializable { | |
def this(): object LazyLeft = { | |
LazyLeft.super.this(); | |
() | |
}; | |
final override def toString(): java.lang.String = "LazyLeft"; | |
case <synthetic> def unapply[A >: Nothing <: Any](x$0: LazyLeft[A]): Option[() => A] = if (x$0.==(null)) | |
scala.this.None | |
else | |
new Some[() => A](x$0.f); | |
case <synthetic> def apply[A >: Nothing <: Any](f: () => A): LazyLeft[A] = new LazyLeft[A](f); | |
protected def readResolve(): java.lang.Object = LazyLeft | |
}; | |
final object Main extends java.lang.Object with App with ScalaObject { | |
def this(): object Main = { | |
Main.super.this(); | |
() | |
}; | |
private[this] val x: LazyEither[Int,Int] = new LazyRight[Int]((() => 1)); | |
<stable> <accessor> def x: LazyEither[Int,Int] = Main.this.x; | |
Main.this.x.bimap[Int, Int](((x: () => Int) => x), ((x: () => Int) => x)).fold[Int](((x: () => Int) => x), ((x: () => Int) => x)); | |
Main.this.x.bimap[() => Int, () => Int]({ | |
((x: => Int) => scala.this.Predef.identity[=> Int](x)) | |
}, { | |
((x: => Int) => scala.this.Predef.identity[=> Int](x)) | |
}).fold[Int](((x: => => Int) => x), ((x: => => Int) => x)) | |
} | |
} | |
scala.tools.nsc.symtab.Types$TypeError: type mismatch; | |
found : Int | |
required: => Int | |
at scala.tools.nsc.typechecker.Contexts$Context.error(Contexts.scala:298) | |
at scala.tools.nsc.typechecker.Infer$Inferencer.error(Infer.scala:207) | |
at scala.tools.nsc.typechecker.Infer$Inferencer.typeError(Infer.scala:217) | |
at scala.tools.nsc.typechecker.Infer$Inferencer.typeErrorTree(Infer.scala:232) | |
at scala.tools.nsc.typechecker.Typers$Typer.adapt(Typers.scala:936) | |
at scala.tools.nsc.typechecker.Typers$Typer.adapt(Typers.scala:713) | |
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:4283) | |
at scala.tools.nsc.typechecker.Typers$Typer.transformedOrTyped(Typers.scala:4431) | |
at scala.tools.nsc.typechecker.Typers$Typer.typedDefDef(Typers.scala:1760) | |
at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:3922) | |
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:4274) | |
at scala.tools.nsc.typechecker.Typers$Typer.typedStat$1(Typers.scala:2100) | |
at scala.tools.nsc.typechecker.Typers$Typer$$anonfun$24.apply(Typers.scala:2184) | |
at scala.tools.nsc.typechecker.Typers$Typer$$anonfun$24.apply(Typers.scala:2184) | |
at scala.collection.immutable.List.loop$1(List.scala:148) | |
at scala.collection.immutable.List.mapConserve(List.scala:164) | |
at scala.tools.nsc.typechecker.Typers$Typer.typedStats(Typers.scala:2184) | |
at scala.tools.nsc.typechecker.Typers$Typer.typedTemplate(Typers.scala:1512) | |
at scala.tools.nsc.typechecker.Typers$Typer.typedClassDef(Typers.scala:1278) | |
at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:3913) | |
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:4274) | |
at scala.tools.nsc.typechecker.Typers$Typer.typedStat$1(Typers.scala:2100) | |
at scala.tools.nsc.typechecker.Typers$Typer$$anonfun$24.apply(Typers.scala:2184) | |
at scala.tools.nsc.typechecker.Typers$Typer$$anonfun$24.apply(Typers.scala:2184) | |
at scala.collection.immutable.List.loop$1(List.scala:148) | |
at scala.collection.immutable.List.mapConserve(List.scala:164) | |
at scala.tools.nsc.typechecker.Typers$Typer.typedStats(Typers.scala:2184) | |
at scala.tools.nsc.typechecker.Typers$Typer.typedBlock(Typers.scala:1919) | |
at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:3954) | |
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:4274) | |
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:4334) | |
at scala.tools.nsc.typechecker.Typers$Typer.typedPos(Typers.scala:4338) | |
at scala.tools.nsc.transform.UnCurry$UnCurryTransformer.transformFunction(UnCurry.scala:357) | |
at scala.tools.nsc.transform.UnCurry$UnCurryTransformer.mainTransform(UnCurry.scala:599) | |
at scala.tools.nsc.transform.UnCurry$UnCurryTransformer.transform(UnCurry.scala:148) | |
at scala.tools.nsc.ast.Trees$Transformer.transform(Trees.scala:799) | |
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:53) | |
at scala.tools.nsc.transform.UnCurry$UnCurryTransformer.mainTransform(UnCurry.scala:605) | |
at scala.tools.nsc.transform.UnCurry$UnCurryTransformer.transform(UnCurry.scala:148) | |
at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transformTrees$1.apply(Trees.scala:873) | |
at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transformTrees$1.apply(Trees.scala:873) | |
at scala.collection.immutable.List.loop$1(List.scala:148) | |
at scala.collection.immutable.List.mapConserve(List.scala:164) | |
at scala.tools.nsc.ast.Trees$Transformer.transformTrees(Trees.scala:873) | |
at scala.tools.nsc.transform.UnCurry$UnCurryTransformer$$anonfun$mainTransform$3.apply(UnCurry.scala:576) | |
at scala.tools.nsc.transform.UnCurry$UnCurryTransformer$$anonfun$mainTransform$3.apply(UnCurry.scala:574) | |
at scala.tools.nsc.transform.UnCurry$UnCurryTransformer.withNeedLift$1(UnCurry.scala:476) | |
at scala.tools.nsc.transform.UnCurry$UnCurryTransformer.mainTransform(UnCurry.scala:574) | |
at scala.tools.nsc.transform.UnCurry$UnCurryTransformer.transform(UnCurry.scala:148) | |
at scala.tools.nsc.ast.Trees$Transformer.transform(Trees.scala:845) | |
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:53) | |
at scala.tools.nsc.transform.UnCurry$UnCurryTransformer.mainTransform(UnCurry.scala:605) | |
at scala.tools.nsc.transform.UnCurry$UnCurryTransformer.transform(UnCurry.scala:148) | |
at scala.tools.nsc.ast.Trees$Transformer.transform(Trees.scala:835) | |
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:53) | |
at scala.tools.nsc.transform.UnCurry$UnCurryTransformer.mainTransform(UnCurry.scala:605) | |
at scala.tools.nsc.transform.UnCurry$UnCurryTransformer.transform(UnCurry.scala:148) | |
at scala.tools.nsc.transform.UnCurry$UnCurryTransformer$$anonfun$mainTransform$3.apply(UnCurry.scala:576) | |
at scala.tools.nsc.transform.UnCurry$UnCurryTransformer$$anonfun$mainTransform$3.apply(UnCurry.scala:574) | |
at scala.tools.nsc.transform.UnCurry$UnCurryTransformer.withNeedLift$1(UnCurry.scala:476) | |
at scala.tools.nsc.transform.UnCurry$UnCurryTransformer.mainTransform(UnCurry.scala:574) | |
at scala.tools.nsc.transform.UnCurry$UnCurryTransformer.transform(UnCurry.scala:148) | |
at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transformStats$1$$anonfun$apply$5.apply(Trees.scala:890) | |
at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transformStats$1$$anonfun$apply$5.apply(Trees.scala:890) | |
at scala.tools.nsc.ast.Trees$Transformer.atOwner(Trees.scala:899) | |
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:38) | |
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:31) | |
at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transformStats$1.apply(Trees.scala:890) | |
at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transformStats$1.apply(Trees.scala:889) | |
at scala.collection.immutable.List.loop$1(List.scala:148) | |
at scala.collection.immutable.List.mapConserve(List.scala:164) | |
at scala.tools.nsc.ast.Trees$Transformer.transformStats(Trees.scala:889) | |
at scala.tools.nsc.ast.Trees$Transformer.transform(Trees.scala:797) | |
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.scala$tools$nsc$transform$TypingTransformers$TypingTransformer$$super$transform(TypingTransformers.scala:49) | |
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer$$anonfun$transform$1.apply(TypingTransformers.scala:49) | |
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer$$anonfun$transform$1.apply(TypingTransformers.scala:49) | |
at scala.tools.nsc.ast.Trees$Transformer.atOwner(Trees.scala:899) | |
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:38) | |
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:31) | |
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:49) | |
at scala.tools.nsc.transform.UnCurry$UnCurryTransformer.mainTransform(UnCurry.scala:602) | |
at scala.tools.nsc.transform.UnCurry$UnCurryTransformer.transform(UnCurry.scala:148) | |
at scala.tools.nsc.ast.Trees$Transformer.transformTemplate(Trees.scala:875) | |
at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transform$2.apply(Trees.scala:767) | |
at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transform$2.apply(Trees.scala:766) | |
at scala.tools.nsc.ast.Trees$Transformer.atOwner(Trees.scala:899) | |
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:38) | |
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:31) | |
at scala.tools.nsc.ast.Trees$Transformer.transform(Trees.scala:765) | |
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:53) | |
at scala.tools.nsc.transform.UnCurry$UnCurryTransformer.mainTransform(UnCurry.scala:605) | |
at scala.tools.nsc.transform.UnCurry$UnCurryTransformer.transform(UnCurry.scala:148) | |
at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transformStats$1.apply(Trees.scala:891) | |
at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transformStats$1.apply(Trees.scala:889) | |
at scala.collection.immutable.List.loop$1(List.scala:148) | |
at scala.collection.immutable.List.mapConserve(List.scala:164) | |
at scala.tools.nsc.ast.Trees$Transformer.transformStats(Trees.scala:889) | |
at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transform$1.apply(Trees.scala:761) | |
at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transform$1.apply(Trees.scala:761) | |
at scala.tools.nsc.ast.Trees$Transformer.atOwner(Trees.scala:899) | |
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:38) | |
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:31) | |
at scala.tools.nsc.ast.Trees$Transformer.transform(Trees.scala:760) | |
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.scala$tools$nsc$transform$TypingTransformers$TypingTransformer$$super$transform(TypingTransformers.scala:49) | |
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer$$anonfun$transform$2.apply(TypingTransformers.scala:51) | |
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer$$anonfun$transform$2.apply(TypingTransformers.scala:51) | |
at scala.tools.nsc.ast.Trees$Transformer.atOwner(Trees.scala:899) | |
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:38) | |
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:31) | |
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:51) | |
at scala.tools.nsc.transform.UnCurry$UnCurryTransformer.mainTransform(UnCurry.scala:605) | |
at scala.tools.nsc.transform.UnCurry$UnCurryTransformer.transform(UnCurry.scala:148) | |
at scala.tools.nsc.ast.Trees$Transformer.transformUnit(Trees.scala:892) | |
at scala.tools.nsc.transform.UnCurry$UnCurryTransformer.transformUnit(UnCurry.scala:142) | |
at scala.tools.nsc.transform.UnCurry$UnCurryTransformer.transformUnit(UnCurry.scala:126) | |
at scala.tools.nsc.transform.Transform$Phase.apply(Transform.scala:30) | |
at scala.tools.nsc.Global$GlobalPhase.applyPhase(Global.scala:329) | |
at scala.tools.nsc.Global$GlobalPhase$$anonfun$run$1.apply(Global.scala:297) | |
at scala.tools.nsc.Global$GlobalPhase$$anonfun$run$1.apply(Global.scala:297) | |
at scala.collection.Iterator$class.foreach(Iterator.scala:772) | |
at scala.collection.mutable.ListBuffer$$anon$1.foreach(ListBuffer.scala:318) | |
at scala.tools.nsc.Global$GlobalPhase.run(Global.scala:297) | |
at scala.tools.nsc.Global$Run.compileSources(Global.scala:953) | |
at scala.tools.nsc.Global$Run.compile(Global.scala:1041) | |
at xsbt.CachedCompiler0.run(CompilerInterface.scala:123) | |
at xsbt.CachedCompiler0.liftedTree1$1(CompilerInterface.scala:99) | |
at xsbt.CachedCompiler0.run(CompilerInterface.scala:99) | |
at xsbt.CompilerInterface.run(CompilerInterface.scala:27) | |
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) | |
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) | |
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) | |
at java.lang.reflect.Method.invoke(Method.java:606) | |
at sbt.compiler.AnalyzingCompiler.call(AnalyzingCompiler.scala:102) | |
at sbt.compiler.AnalyzingCompiler.compile(AnalyzingCompiler.scala:48) | |
at sbt.compiler.AnalyzingCompiler.compile(AnalyzingCompiler.scala:41) | |
at sbt.compiler.AggressiveCompile$$anonfun$3$$anonfun$compileScala$1$1.apply$mcV$sp(AggressiveCompile.scala:98) | |
at sbt.compiler.AggressiveCompile$$anonfun$3$$anonfun$compileScala$1$1.apply(AggressiveCompile.scala:98) | |
at sbt.compiler.AggressiveCompile$$anonfun$3$$anonfun$compileScala$1$1.apply(AggressiveCompile.scala:98) | |
at sbt.compiler.AggressiveCompile.sbt$compiler$AggressiveCompile$$timed(AggressiveCompile.scala:159) | |
at sbt.compiler.AggressiveCompile$$anonfun$3.compileScala$1(AggressiveCompile.scala:97) | |
at sbt.compiler.AggressiveCompile$$anonfun$3.apply(AggressiveCompile.scala:142) | |
at sbt.compiler.AggressiveCompile$$anonfun$3.apply(AggressiveCompile.scala:86) | |
at sbt.inc.IncrementalCompile$$anonfun$doCompile$1.apply(Compile.scala:38) | |
at sbt.inc.IncrementalCompile$$anonfun$doCompile$1.apply(Compile.scala:36) | |
at sbt.inc.Incremental$.cycle(Incremental.scala:73) | |
at sbt.inc.Incremental$$anonfun$1.apply(Incremental.scala:33) | |
at sbt.inc.Incremental$$anonfun$1.apply(Incremental.scala:32) | |
at sbt.inc.Incremental$.manageClassfiles(Incremental.scala:41) | |
at sbt.inc.Incremental$.compile(Incremental.scala:32) | |
at sbt.inc.IncrementalCompile$.apply(Compile.scala:26) | |
at sbt.compiler.AggressiveCompile.compile2(AggressiveCompile.scala:150) | |
at sbt.compiler.AggressiveCompile.compile1(AggressiveCompile.scala:70) | |
at sbt.compiler.AggressiveCompile.apply(AggressiveCompile.scala:45) | |
at sbt.Compiler$.apply(Compiler.scala:70) | |
at sbt.Defaults$.sbt$Defaults$$compileTaskImpl(Defaults.scala:722) | |
at sbt.Defaults$$anonfun$compileTask$1.apply(Defaults.scala:716) | |
at sbt.Defaults$$anonfun$compileTask$1.apply(Defaults.scala:716) | |
at scala.Function1$$anonfun$compose$1.apply(Function1.scala:47) | |
at sbt.$tilde$greater$$anonfun$$u2219$1.apply(TypeFunctions.scala:42) | |
at sbt.std.Transform$$anon$4.work(System.scala:64) | |
at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:237) | |
at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:237) | |
at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:18) | |
at sbt.Execute.work(Execute.scala:244) | |
at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:237) | |
at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:237) | |
at sbt.ConcurrentRestrictions$$anon$4$$anonfun$1.apply(ConcurrentRestrictions.scala:160) | |
at sbt.CompletionService$$anon$2.call(CompletionService.scala:30) | |
at java.util.concurrent.FutureTask.run(FutureTask.java:262) | |
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) | |
at java.util.concurrent.FutureTask.run(FutureTask.java:262) | |
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) | |
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) | |
at java.lang.Thread.run(Thread.java:724) | |
[error] (compile:compile) scala.tools.nsc.symtab.Types$TypeError: type mismatch; | |
[error] found : Int | |
[error] required: => Int |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
sealed trait LazyEither[+A, +B]{ | |
def fold[X](left: (=> A) => X, right: (=> B) => X): X = | |
this match{ | |
case LazyLeft(l) => left(l()) | |
case LazyRight(r) => right(r()) | |
} | |
def bimap[C, D](left: (=> A) => C, right: (=> B) => D): LazyEither[C, D] = | |
this match{ | |
case LazyLeft(l) => LazyLeft(() => left(l())) | |
case LazyRight(r) => LazyRight(() => right(r())) | |
} | |
} | |
final case class LazyRight[B](f: () => B) extends LazyEither[Nothing, B] | |
final case class LazyLeft[A](f: () => A) extends LazyEither[A, Nothing] | |
object Main extends App { | |
val x: LazyEither[Int, Int] = LazyRight(() => 1) | |
x.bimap(x => x, x => x).fold(x => x, x => x) // success | |
x.bimap(identity, identity).fold(x => x, x => x) // error | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment