in scala
package reflect

package reflect

Object Summary
case object NoPrefix
case object NoSymbol
case object NoType
  object Print
case object RootSymbol

Class Summary
case class AppliedType(tpe: Type, args: List[Type])
     tpe[args1, ..., argsn]
case class Apply(fun: Code, args: List[Code])
case class Class(fullname: String)
abstract class Code()
case class Field(fullname: String, tpe: Type)
case class Function(params: List[Symbol], body: Code)
abstract class GlobalSymbol(fullname: String)
case class Ident(sym: Symbol)
  class ImplicitMethodType(formals: List[Type], restpe: Type)
    
case class Literal(value: Any)
case class LocalMethod(owner: Symbol, name: String, tpe: Type)
abstract class LocalSymbol()
case class LocalValue(owner: Symbol, name: String, tpe: Type)
case class Method(fullname: String, tpe: Type)
case class MethodType(formals: List[Type], restpe: Type)
     (formals1 ...
case class NamedType(fullname: String)
     fullname
case class PolyType(typeParams: List[Symbol], typeBounds: List[Tuple2[Type,Type]], resultType: Type)
    
case class PrefixedType(pre: Type, sym: Symbol)
     pre # sym
case class Select(qual: Code, sym: Symbol)
case class SingleType(pre: Type, sym: Symbol)
     pre.type # sym == pre.sym
abstract class Symbol()
case class This(sym: Symbol)
case class ThisType(clazz: Symbol)
     clazz.this
abstract class Type()
case class TypeApply(fun: Code, args: List[Type])
case class TypeBounds(lo: Type, hi: Type)
     [a <: lo >: hi]
case class TypeField(fullname: String, tpe: Type)
  class TypedCode[T](code: Code)