Skip to content

Instantly share code, notes, and snippets.

@xuwei-k
Created October 7, 2013 04:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save xuwei-k/6862748 to your computer and use it in GitHub Desktop.
Save xuwei-k/6862748 to your computer and use it in GitHub Desktop.
Scalac bug ?
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)
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
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