Created
December 17, 2014 09:09
-
-
Save holograph/be4b298785ba48b38d06 to your computer and use it in GitHub Desktop.
Games with path-dependent types, singletons and type projections
This file contains hidden or 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
arilou:accord tomer$ scala | |
Welcome to Scala version 2.11.4 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_05). | |
Type in expressions to have them evaluated. | |
Type :help for more information. | |
scala> trait A { case object B } | |
defined trait A | |
scala> def m[T <: A](x: T): T#B = x.B | |
<console>:8: error: type B is not a member of type parameter T | |
def m[T <: A](x: T): T#B = x.B | |
^ | |
scala> def m[T <: A](x: T): T#B.type = x.B | |
<console>:1: error: '=' expected but '.' found. | |
def m[T <: A](x: T): T#B.type = x.B | |
^ | |
scala> def m[T <: A](x: T): x.B = x.B | |
<console>:8: error: type B is not a member of type parameter T | |
def m[T <: A](x: T): x.B = x.B | |
cala> def m[T <: A](x: T): A.type#B = x.B | |
<console>:8: error: not found: value A | |
def m[T <: A](x: T): A.type#B = x.B | |
^ | |
java.lang.AssertionError: assertion failed: <A: error> | |
at scala.reflect.internal.Trees$SelectFromTypeTree.<init>(Trees.scala:568) | |
at scala.reflect.internal.Trees$StrictTreeCopier.SelectFromTypeTree(Trees.scala:738) | |
at scala.reflect.internal.Trees$StrictTreeCopier.SelectFromTypeTree(Trees.scala:652) | |
at scala.reflect.internal.Trees$LazyTreeCopier.SelectFromTypeTree(Trees.scala:949) | |
at scala.reflect.internal.Trees$LazyTreeCopier.SelectFromTypeTree(Trees.scala:749) | |
at scala.tools.nsc.typechecker.Typers$Typer.typedSelectInternal$1(Typers.scala:4659) | |
at scala.tools.nsc.typechecker.Typers$Typer.scala$tools$nsc$typechecker$Typers$Typer$$typedSelect$1(Typers.scala:4586) | |
at scala.tools.nsc.typechecker.Typers$Typer.typedSelectFromTypeTree$1(Typers.scala:5145) | |
at scala.tools.nsc.typechecker.Typers$Typer.typedTypTree$1(Typers.scala:5198) | |
at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5256) | |
at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5295) | |
at scala.tools.nsc.typechecker.Typers$Typer.scala$tools$nsc$typechecker$Typers$Typer$$typedInternal(Typers.scala:5322) | |
at scala.tools.nsc.typechecker.Typers$Typer.body$2(Typers.scala:5269) | |
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5273) | |
at scala.tools.nsc.interpreter.ReplGlobal$$anon$1$$anon$2.typed(ReplGlobal.scala:36) | |
at scala.tools.nsc.typechecker.Typers$Typer.typedType(Typers.scala:5416) | |
at scala.tools.nsc.typechecker.Typers$Typer.typedType(Typers.scala:5419) | |
at scala.tools.nsc.typechecker.Namers$Namer.methodSig(Namers.scala:1159) | |
at scala.tools.nsc.typechecker.Namers$Namer.getSig$1(Namers.scala:1526) | |
at scala.tools.nsc.typechecker.Namers$Namer.typeSig(Namers.scala:1538) | |
at scala.tools.nsc.typechecker.Namers$Namer$$anonfun$monoTypeCompleter$1$$anonfun$apply$1.apply$mcV$sp(Namers.scala:778) | |
at scala.tools.nsc.typechecker.Namers$Namer$$anonfun$monoTypeCompleter$1$$anonfun$apply$1.apply(Namers.scala:777) | |
at scala.tools.nsc.typechecker.Namers$Namer$$anonfun$monoTypeCompleter$1$$anonfun$apply$1.apply(Namers.scala:777) | |
at scala.tools.nsc.typechecker.Namers$Namer.scala$tools$nsc$typechecker$Namers$Namer$$logAndValidate(Namers.scala:1565) | |
at scala.tools.nsc.typechecker.Namers$Namer$$anonfun$monoTypeCompleter$1.apply(Namers.scala:777) | |
at scala.tools.nsc.typechecker.Namers$Namer$$anonfun$monoTypeCompleter$1.apply(Namers.scala:769) | |
at scala.tools.nsc.typechecker.Namers$$anon$1.completeImpl(Namers.scala:1681) | |
at scala.tools.nsc.typechecker.Namers$LockingTypeCompleter$class.complete(Namers.scala:1689) | |
at scala.tools.nsc.typechecker.Namers$$anon$1.complete(Namers.scala:1679) | |
at scala.tools.nsc.typechecker.Namers$PolyTypeCompleter.completeImpl(Namers.scala:1722) | |
at scala.tools.nsc.typechecker.Namers$LockingTypeCompleter$class.complete(Namers.scala:1689) | |
at scala.tools.nsc.typechecker.Namers$PolyTypeCompleter.complete(Namers.scala:1701) | |
at scala.reflect.internal.Symbols$Symbol.info(Symbols.scala:1481) | |
at scala.reflect.internal.Symbols$Symbol.initialize(Symbols.scala:1628) | |
at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:4911) | |
at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5295) | |
at scala.tools.nsc.typechecker.Typers$Typer.scala$tools$nsc$typechecker$Typers$Typer$$typedInternal(Typers.scala:5322) | |
at scala.tools.nsc.typechecker.Typers$Typer.body$2(Typers.scala:5269) | |
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5273) | |
at scala.tools.nsc.interpreter.ReplGlobal$$anon$1$$anon$2.typed(ReplGlobal.scala:36) | |
at scala.tools.nsc.typechecker.Typers$Typer.typedByValueExpr(Typers.scala:5351) | |
at scala.tools.nsc.typechecker.Typers$Typer.scala$tools$nsc$typechecker$Typers$Typer$$typedStat$1(Typers.scala:2977) | |
at scala.tools.nsc.typechecker.Typers$Typer$$anonfun$60.apply(Typers.scala:3081) | |
at scala.tools.nsc.typechecker.Typers$Typer$$anonfun$60.apply(Typers.scala:3081) | |
at scala.collection.immutable.List.loop$1(List.scala:172) | |
at scala.collection.immutable.List.mapConserve(List.scala:188) | |
at scala.tools.nsc.typechecker.Typers$Typer.typedStats(Typers.scala:3081) | |
at scala.tools.nsc.typechecker.Typers$Typer.typedTemplate(Typers.scala:1880) | |
at scala.tools.nsc.typechecker.Typers$Typer.typedModuleDef(Typers.scala:1767) | |
at scala.tools.nsc.typechecker.Typers$Typer.typedMemberDef$1(Typers.scala:5209) | |
at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5258) | |
at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5295) | |
at scala.tools.nsc.typechecker.Typers$Typer.scala$tools$nsc$typechecker$Typers$Typer$$typedInternal(Typers.scala:5322) | |
at scala.tools.nsc.typechecker.Typers$Typer.body$2(Typers.scala:5269) | |
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5273) | |
at scala.tools.nsc.interpreter.ReplGlobal$$anon$1$$anon$2.typed(ReplGlobal.scala:36) | |
at scala.tools.nsc.typechecker.Typers$Typer.typedByValueExpr(Typers.scala:5351) | |
at scala.tools.nsc.typechecker.Typers$Typer.scala$tools$nsc$typechecker$Typers$Typer$$typedStat$1(Typers.scala:2977) | |
at scala.tools.nsc.typechecker.Typers$Typer$$anonfun$60.apply(Typers.scala:3081) | |
at scala.tools.nsc.typechecker.Typers$Typer$$anonfun$60.apply(Typers.scala:3081) | |
at scala.collection.immutable.List.loop$1(List.scala:172) | |
at scala.collection.immutable.List.mapConserve(List.scala:188) | |
at scala.tools.nsc.typechecker.Typers$Typer.typedStats(Typers.scala:3081) | |
at scala.tools.nsc.typechecker.Typers$Typer.typedTemplate(Typers.scala:1880) | |
at scala.tools.nsc.typechecker.Typers$Typer.typedModuleDef(Typers.scala:1767) | |
at scala.tools.nsc.typechecker.Typers$Typer.typedMemberDef$1(Typers.scala:5209) | |
at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5258) | |
at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5295) | |
at scala.tools.nsc.typechecker.Typers$Typer.scala$tools$nsc$typechecker$Typers$Typer$$typedInternal(Typers.scala:5322) | |
at scala.tools.nsc.typechecker.Typers$Typer.body$2(Typers.scala:5269) | |
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5273) | |
at scala.tools.nsc.interpreter.ReplGlobal$$anon$1$$anon$2.typed(ReplGlobal.scala:36) | |
at scala.tools.nsc.typechecker.Typers$Typer.typedByValueExpr(Typers.scala:5351) | |
at scala.tools.nsc.typechecker.Typers$Typer.scala$tools$nsc$typechecker$Typers$Typer$$typedStat$1(Typers.scala:2977) | |
at scala.tools.nsc.typechecker.Typers$Typer$$anonfun$60.apply(Typers.scala:3081) | |
at scala.tools.nsc.typechecker.Typers$Typer$$anonfun$60.apply(Typers.scala:3081) | |
at scala.collection.immutable.List.loop$1(List.scala:172) | |
at scala.collection.immutable.List.mapConserve(List.scala:188) | |
at scala.tools.nsc.typechecker.Typers$Typer.typedStats(Typers.scala:3081) | |
at scala.tools.nsc.typechecker.Typers$Typer.typedTemplate(Typers.scala:1880) | |
at scala.tools.nsc.typechecker.Typers$Typer.typedModuleDef(Typers.scala:1767) | |
at scala.tools.nsc.typechecker.Typers$Typer.typedMemberDef$1(Typers.scala:5209) | |
at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5258) | |
at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5295) | |
at scala.tools.nsc.typechecker.Typers$Typer.scala$tools$nsc$typechecker$Typers$Typer$$typedInternal(Typers.scala:5322) | |
at scala.tools.nsc.typechecker.Typers$Typer.body$2(Typers.scala:5269) | |
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5273) | |
at scala.tools.nsc.interpreter.ReplGlobal$$anon$1$$anon$2.typed(ReplGlobal.scala:36) | |
at scala.tools.nsc.typechecker.Typers$Typer.typedByValueExpr(Typers.scala:5351) | |
at scala.tools.nsc.typechecker.Typers$Typer.scala$tools$nsc$typechecker$Typers$Typer$$typedStat$1(Typers.scala:2977) | |
at scala.tools.nsc.typechecker.Typers$Typer$$anonfun$60.apply(Typers.scala:3081) | |
at scala.tools.nsc.typechecker.Typers$Typer$$anonfun$60.apply(Typers.scala:3081) | |
at scala.collection.immutable.List.loop$1(List.scala:172) | |
at scala.collection.immutable.List.mapConserve(List.scala:188) | |
at scala.tools.nsc.typechecker.Typers$Typer.typedStats(Typers.scala:3081) | |
at scala.tools.nsc.typechecker.Typers$Typer.typedPackageDef$1(Typers.scala:4918) | |
at scala.tools.nsc.typechecker.Typers$Typer.typedMemberDef$1(Typers.scala:5211) | |
at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5258) | |
at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5295) | |
at scala.tools.nsc.typechecker.Typers$Typer.scala$tools$nsc$typechecker$Typers$Typer$$typedInternal(Typers.scala:5322) | |
at scala.tools.nsc.typechecker.Typers$Typer.body$2(Typers.scala:5269) | |
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5273) | |
at scala.tools.nsc.interpreter.ReplGlobal$$anon$1$$anon$2.typed(ReplGlobal.scala:36) | |
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5347) | |
at scala.tools.nsc.typechecker.Analyzer$typerFactory$$anon$3.apply(Analyzer.scala:102) | |
at scala.tools.nsc.Global$GlobalPhase$$anonfun$applyPhase$1.apply$mcV$sp(Global.scala:428) | |
at scala.tools.nsc.Global$GlobalPhase.withCurrentUnit(Global.scala:419) | |
at scala.tools.nsc.Global$GlobalPhase.applyPhase(Global.scala:428) | |
at scala.tools.nsc.typechecker.Analyzer$typerFactory$$anon$3$$anonfun$run$1.apply(Analyzer.scala:94) | |
at scala.tools.nsc.typechecker.Analyzer$typerFactory$$anon$3$$anonfun$run$1.apply(Analyzer.scala:93) | |
at scala.collection.Iterator$class.foreach(Iterator.scala:743) | |
at scala.collection.AbstractIterator.foreach(Iterator.scala:1195) | |
at scala.tools.nsc.typechecker.Analyzer$typerFactory$$anon$3.run(Analyzer.scala:93) | |
at scala.tools.nsc.Global$Run.compileUnitsInternal(Global.scala:1338) | |
at scala.tools.nsc.Global$Run.compileUnits(Global.scala:1325) | |
at scala.tools.nsc.Global$Run.compileSources(Global.scala:1320) | |
at scala.tools.nsc.interpreter.IMain.compileSourcesKeepingRun(IMain.scala:407) | |
at scala.tools.nsc.interpreter.IMain$ReadEvalPrint.compileAndSaveRun(IMain.scala:823) | |
at scala.tools.nsc.interpreter.IMain$ReadEvalPrint.compile(IMain.scala:782) | |
at scala.tools.nsc.interpreter.IMain$Request.compile$lzycompute(IMain.scala:958) | |
at scala.tools.nsc.interpreter.IMain$Request.compile(IMain.scala:953) | |
at scala.tools.nsc.interpreter.IMain.compile(IMain.scala:550) | |
at scala.tools.nsc.interpreter.IMain.interpret(IMain.scala:538) | |
at scala.tools.nsc.interpreter.IMain.interpret(IMain.scala:536) | |
at scala.tools.nsc.interpreter.ILoop.reallyInterpret$1(ILoop.scala:750) | |
at scala.tools.nsc.interpreter.ILoop.interpretStartingWith(ILoop.scala:795) | |
at scala.tools.nsc.interpreter.ILoop.command(ILoop.scala:662) | |
at scala.tools.nsc.interpreter.ILoop.processLine(ILoop.scala:407) | |
at scala.tools.nsc.interpreter.ILoop.loop(ILoop.scala:430) | |
at scala.tools.nsc.interpreter.ILoop$$anonfun$process$1.apply$mcZ$sp(ILoop.scala:864) | |
at scala.tools.nsc.interpreter.ILoop$$anonfun$process$1.apply(ILoop.scala:850) | |
at scala.tools.nsc.interpreter.ILoop$$anonfun$process$1.apply(ILoop.scala:850) | |
at scala.reflect.internal.util.ScalaClassLoader$.savingContextLoader(ScalaClassLoader.scala:97) | |
at scala.tools.nsc.interpreter.ILoop.process(ILoop.scala:850) | |
at scala.tools.nsc.MainGenericRunner.runTarget$1(MainGenericRunner.scala:74) | |
at scala.tools.nsc.MainGenericRunner.run$1(MainGenericRunner.scala:87) | |
at scala.tools.nsc.MainGenericRunner.process(MainGenericRunner.scala:98) | |
at scala.tools.nsc.MainGenericRunner$.main(MainGenericRunner.scala:103) | |
at scala.tools.nsc.MainGenericRunner.main(MainGenericRunner.scala) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment