c:\tmp>type CaseExample.scala case class CaseExample(name: String, value: Int) c:\tmp>scalac CaseExample.scala c:\tmp>scalap CaseExample case class CaseExample(name : scala.Predef.String, value : scala.Int) extends scala.AnyRef with scala.Product with scala.Serializable { val name : scala.Predef.String = { /* compiled code */ } val value : scala.Int = { /* compiled code */ } def copy(name : scala.Predef.String, value : scala.Int) : CaseExample = { /* compiled code */ } override def productPrefix : java.lang.String = { /* compiled code */ } def productArity : scala.Int = { /* compiled code */ } def productElement(x$1 : scala.Int) : scala.Any = { /* compiled code */ } override def productIterator : scala.collection.Iterator[scala.Any] = { /* compiled code */ } def canEqual(x$1 : scala.Any) : scala.Boolean = { /* compiled code */ } override def hashCode() : scala.Int = { /* compiled code */ } override def toString() : java.lang.String = { /* compiled code */ } override def equals(x$1 : scala.Any) : scala.Boolean = { /* compiled code */ } } object CaseExample extends scala.runtime.AbstractFunction2[scala.Predef.String, scala.Int, CaseExample] with scala.Serializable { def this() = { /* compiled code */ } final override def toString() : java.lang.String = { /* compiled code */ } def apply(name : scala.Predef.String, value : scala.Int) : CaseExample = { /* compiled code */ } def unapply(x$0 : CaseExample) : scala.Option[scala.Tuple2[scala.Predef.String, scala.Int]] = { /* compiled code */ } } c:\tmp>scalap CaseExample$ package CaseExample$; final class CaseExample$ extends scala.runtime.AbstractFunction2 with scala.Serializable { def this(): scala.Unit; def apply(scala.Any, scala.Any): scala.Any; def readResolve(): scala.Any; def unapply(CaseExample): scala.Option; def apply(java.lang.String, scala.Int): CaseExample; def toString(): java.lang.String; } object CaseExample$ { final val MODULE$: CaseExample$; }