BUILD SUCCESSFUL | |
Total time: 14 seconds | |
Welcome to Scala version 2.11.0-20130328-114111-c5a0f8e9bd (OpenJDK 64-Bit Server VM, Java 1.7.0_17). | |
Type in expressions to have them evaluated. | |
Type :help for more information. | |
scala> :power | |
** Power User mode enabled - BEEP WHIR GYVE ** | |
** :phase has been set to 'typer'. ** | |
** scala.tools.nsc._ has been imported ** | |
** global._, definitions._ also imported ** | |
** Try :help, :vals, power.<tab> ** | |
scala> def kindCommandInternal(expr: String, verbose: Boolean): String = { | |
| //import scala.reflect.runtime.universe._ | |
| def kind(a: Type): String = { | |
| def typeKind(sig: Type): String = sig match { | |
| case PolyType(params, resultType) => | |
| (params map { p => | |
| typeKind(p.typeSignature) match { | |
| case "*" => "*" | |
| case s => "(" + s + ")" | |
| } | |
| }).mkString(" -> ") + " -> *" | |
| case _ => "*" | |
| } | |
| def typeSig(tpe: Type): Type = tpe match { | |
| case SingleType(pre, sym) => sym.companionSymbol.typeSignature | |
| case ExistentialType(q, TypeRef(pre, sym, args)) => sym.typeSignature | |
| case TypeRef(pre, sym, args) => sym.typeSignature | |
| case ClassInfoType(ext, scope, sym) => sym.typeSignature | |
| } | |
| val sig = typeSig(a) | |
| val s = typeKind(sig) | |
| val result = sig.typeSymbol.name + "'s kind is " + s | |
| val additionalInfo = if(verbose) | |
| s match { | |
| case "*" => | |
| "\nThis is a proper type." | |
| case x if !(x contains "(") => | |
| "\nThis is a type constructor: a 1st-order-kinded type." | |
| case x => | |
| "\nThis is a type constructor that takes type constructor(s): a higher-kinded type." | |
| } | |
| else "" | |
| result + additionalInfo | |
| } | |
| //val m = ru.runtimeMirror(intp.classLoader) | |
| //val typ = m.staticClass(expr.trim).toType | |
| val context = global.analyzer.rootContext(NoCompilationUnit) | |
| val typ = context.lookupSymbol(expr.trim: TypeName, _ => true).symbol.toType | |
| kind(typ) | |
| } | |
kindCommandInternal: (expr: String, verbose: Boolean)String | |
scala> kindCommandInternal("Option", false) | |
res0: String = Option's kind is * -> * | |
scala> kindCommandInternal("scala.Option", false) | |
scala.MatchError: <notype> (of class scala.reflect.internal.Types$NoType$) | |
at .typeSig$1(<console>:85) | |
at .kind$1(<console>:91) | |
at .kindCommandInternal(<console>:110) | |
at .<init>(<console>:38) | |
at .<clinit>(<console>) | |
at $anonfun$1.apply(<console>:7) | |
at $anonfun$1.apply(<console>:6) | |
at scala.reflect.internal.SymbolTable.enteringPhase(SymbolTable.scala:214) | |
at scala.tools.nsc.interpreter.Phased$class.atCurrent(Phased.scala:68) | |
at scala.tools.nsc.interpreter.Power$$anon$3.atCurrent(Power.scala:316) | |
at .<init>(<console>:6) | |
at .<clinit>(<console>) | |
at $print(<console>) | |
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:601) | |
at scala.tools.nsc.interpreter.IMain$ReadEvalPrint.call(IMain.scala:751) | |
at scala.tools.nsc.interpreter.IMain$Request.loadAndRun(IMain.scala:966) | |
at scala.tools.nsc.interpreter.IMain$WrappedRequest$$anonfun$loadAndRunReq$1.apply(IMain.scala:613) | |
at scala.tools.nsc.interpreter.IMain$WrappedRequest$$anonfun$loadAndRunReq$1.apply(IMain.scala:612) | |
at scala.tools.nsc.util.ScalaClassLoader$class.asContext(ScalaClassLoader.scala:31) | |
at scala.tools.nsc.util.AbstractFileClassLoader.asContext(AbstractFileClassLoader.scala:19) | |
at scala.tools.nsc.interpreter.IMain$WrappedRequest.loadAndRunReq(IMain.scala:612) | |
at scala.tools.nsc.interpreter.IMain.interpret(IMain.scala:539) | |
at scala.tools.nsc.interpreter.IMain.interpret(IMain.scala:535) | |
at scala.tools.nsc.interpreter.ILoop.reallyInterpret$1(ILoop.scala:574) | |
at scala.tools.nsc.interpreter.ILoop.interpretStartingWith(ILoop.scala:619) | |
at scala.tools.nsc.interpreter.ILoop.command(ILoop.scala:531) | |
at scala.tools.nsc.interpreter.ILoop.processLine(ILoop.scala:387) | |
at scala.tools.nsc.interpreter.ILoop.loop(ILoop.scala:404) | |
at scala.tools.nsc.interpreter.ILoop$$anonfun$process$1.apply$mcZ$sp(ILoop.scala:687) | |
at scala.tools.nsc.interpreter.ILoop$$anonfun$process$1.apply(ILoop.scala:673) | |
at scala.tools.nsc.interpreter.ILoop$$anonfun$process$1.apply(ILoop.scala:673) | |
at scala.tools.nsc.util.ScalaClassLoader$.savingContextLoader(ScalaClassLoader.scala:95) | |
at scala.tools.nsc.interpreter.ILoop.process(ILoop.scala:673) | |
at scala.tools.nsc.MainGenericRunner.runTarget$1(MainGenericRunner.scala:80) | |
at scala.tools.nsc.MainGenericRunner.process(MainGenericRunner.scala:93) | |
at scala.tools.nsc.MainGenericRunner$.main(MainGenericRunner.scala:102) | |
at scala.tools.nsc.MainGenericRunner.main(MainGenericRunner.scala) |
scala> kindCommandInternal("scalaz.Monad", false) | |
scala.MatchError: <notype> (of class scala.reflect.internal.Types$NoType$) | |
at .typeSig$1(<console>:85) | |
at .kind$1(<console>:91) | |
at .kindCommandInternal(<console>:110) | |
at .<init>(<console>:35) | |
at .<clinit>(<console>) | |
at $anonfun$1.apply(<console>:7) | |
at $anonfun$1.apply(<console>:6) | |
at scala.reflect.internal.SymbolTable.enteringPhase(SymbolTable.scala:214) | |
at scala.tools.nsc.interpreter.Phased$class.atCurrent(Phased.scala:68) | |
at scala.tools.nsc.interpreter.Power$$anon$3.atCurrent(Power.scala:316) | |
at .<init>(<console>:6) | |
at .<clinit>(<console>) | |
at $print(<console>) | |
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:601) | |
at scala.tools.nsc.interpreter.IMain$ReadEvalPrint.call(IMain.scala:751) | |
at scala.tools.nsc.interpreter.IMain$Request.loadAndRun(IMain.scala:966) | |
at scala.tools.nsc.interpreter.IMain$WrappedRequest$$anonfun$loadAndRunReq$1.apply(IMain.scala:613) | |
at scala.tools.nsc.interpreter.IMain$WrappedRequest$$anonfun$loadAndRunReq$1.apply(IMain.scala:612) | |
at scala.tools.nsc.util.ScalaClassLoader$class.asContext(ScalaClassLoader.scala:31) | |
at scala.tools.nsc.util.AbstractFileClassLoader.asContext(AbstractFileClassLoader.scala:19) | |
at scala.tools.nsc.interpreter.IMain$WrappedRequest.loadAndRunReq(IMain.scala:612) | |
at scala.tools.nsc.interpreter.IMain.interpret(IMain.scala:539) | |
at scala.tools.nsc.interpreter.IMain.interpret(IMain.scala:535) | |
at scala.tools.nsc.interpreter.ILoop.reallyInterpret$1(ILoop.scala:574) | |
at scala.tools.nsc.interpreter.ILoop.interpretStartingWith(ILoop.scala:619) | |
at scala.tools.nsc.interpreter.ILoop.command(ILoop.scala:531) | |
at scala.tools.nsc.interpreter.ILoop.processLine(ILoop.scala:387) | |
at scala.tools.nsc.interpreter.ILoop.loop(ILoop.scala:404) | |
at scala.tools.nsc.interpreter.ILoop$$anonfun$process$1.apply$mcZ$sp(ILoop.scala:687) | |
at scala.tools.nsc.interpreter.ILoop$$anonfun$process$1.apply(ILoop.scala:673) | |
at scala.tools.nsc.interpreter.ILoop$$anonfun$process$1.apply(ILoop.scala:673) | |
at scala.tools.nsc.util.ScalaClassLoader$.savingContextLoader(ScalaClassLoader.scala:95) | |
at scala.tools.nsc.interpreter.ILoop.process(ILoop.scala:673) | |
at scala.tools.nsc.MainGenericRunner.runTarget$1(MainGenericRunner.scala:80) | |
at scala.tools.nsc.MainGenericRunner.process(MainGenericRunner.scala:93) | |
at scala.tools.nsc.MainGenericRunner$.main(MainGenericRunner.scala:102) | |
at scala.tools.nsc.MainGenericRunner.main(MainGenericRunner.scala) | |
scala> import scalaz._ | |
import scalaz._ | |
scala> kindCommandInternal("Monad", false) | |
scala.MatchError: <notype> (of class scala.reflect.internal.Types$NoType$) | |
at .typeSig$1(<console>:85) | |
at .kind$1(<console>:91) | |
at .kindCommandInternal(<console>:110) | |
at .<init>(<console>:38) | |
at .<clinit>(<console>) | |
at $anonfun$1.apply(<console>:7) | |
at $anonfun$1.apply(<console>:6) | |
at scala.reflect.internal.SymbolTable.enteringPhase(SymbolTable.scala:214) | |
at scala.tools.nsc.interpreter.Phased$class.atCurrent(Phased.scala:68) | |
at scala.tools.nsc.interpreter.Power$$anon$3.atCurrent(Power.scala:316) | |
at .<init>(<console>:6) | |
at .<clinit>(<console>) | |
at $print(<console>) | |
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:601) | |
at scala.tools.nsc.interpreter.IMain$ReadEvalPrint.call(IMain.scala:751) | |
at scala.tools.nsc.interpreter.IMain$Request.loadAndRun(IMain.scala:966) | |
at scala.tools.nsc.interpreter.IMain$WrappedRequest$$anonfun$loadAndRunReq$1.apply(IMain.scala:613) | |
at scala.tools.nsc.interpreter.IMain$WrappedRequest$$anonfun$loadAndRunReq$1.apply(IMain.scala:612) | |
at scala.tools.nsc.util.ScalaClassLoader$class.asContext(ScalaClassLoader.scala:31) | |
at scala.tools.nsc.util.AbstractFileClassLoader.asContext(AbstractFileClassLoader.scala:19) | |
at scala.tools.nsc.interpreter.IMain$WrappedRequest.loadAndRunReq(IMain.scala:612) | |
at scala.tools.nsc.interpreter.IMain.interpret(IMain.scala:539) | |
at scala.tools.nsc.interpreter.IMain.interpret(IMain.scala:535) | |
at scala.tools.nsc.interpreter.ILoop.reallyInterpret$1(ILoop.scala:574) | |
at scala.tools.nsc.interpreter.ILoop.interpretStartingWith(ILoop.scala:619) | |
at scala.tools.nsc.interpreter.ILoop.command(ILoop.scala:531) | |
at scala.tools.nsc.interpreter.ILoop.processLine(ILoop.scala:387) | |
at scala.tools.nsc.interpreter.ILoop.loop(ILoop.scala:404) | |
at scala.tools.nsc.interpreter.ILoop$$anonfun$process$1.apply$mcZ$sp(ILoop.scala:687) | |
at scala.tools.nsc.interpreter.ILoop$$anonfun$process$1.apply(ILoop.scala:673) | |
at scala.tools.nsc.interpreter.ILoop$$anonfun$process$1.apply(ILoop.scala:673) | |
at scala.tools.nsc.util.ScalaClassLoader$.savingContextLoader(ScalaClassLoader.scala:95) | |
at scala.tools.nsc.interpreter.ILoop.process(ILoop.scala:673) | |
at scala.tools.nsc.MainGenericRunner.runTarget$1(MainGenericRunner.scala:80) | |
at scala.tools.nsc.MainGenericRunner.process(MainGenericRunner.scala:93) | |
at scala.tools.nsc.MainGenericRunner$.main(MainGenericRunner.scala:102) | |
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