Last active
July 26, 2017 20:42
-
-
Save milessabin/6c9c060cf5159563b722d49ce9ee103e to your computer and use it in GitHub Desktop.
Induction benchmark: vanilla scalac vs. scalac + proof of concept inductive solver
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
// Compiled with ./build/pack/bin/scalac -J-Xss4M -J-Xmx4G test/files/pos/inductive-implicits.scala | |
// HList scalac scalac + | |
// Size inductive heuristics | |
// 50 6 4 | |
// 100 15 5 | |
// 150 36 6 | |
// 200 68 6 | |
// 250 114 7 | |
// 300 179 9 | |
// 350 274 12 | |
// 400 384 15 | |
// 450 529 20 | |
// 500 723 26 | |
// Compile time in seconds | |
package shapeless { | |
sealed trait HList extends Product with Serializable | |
final case class ::[+H, +T <: HList](head : H, tail : T) extends HList { | |
def ::[HH](h : HH) : HH :: H :: T = shapeless.::(h, this) | |
override def toString = head match { | |
case _: ::[_, _] => "("+head.toString+") :: "+tail.toString | |
case _ => head.toString+" :: "+tail.toString | |
} | |
} | |
sealed trait HNil extends HList { | |
def ::[H](h : H) = shapeless.::(h, this) | |
override def toString = "HNil" | |
} | |
case object HNil extends HNil | |
trait Selector[L <: HList, U] { | |
def apply(l: L): U | |
} | |
object Selector { | |
def apply[L <: HList, U](implicit selector: Selector[L, U]): Selector[L, U] = selector | |
implicit def inHead[H, T <: HList]: Selector[H :: T, H] = | |
new Selector[H :: T, H] { | |
def apply(l : H :: T) = l.head | |
} | |
implicit def inTail[H, T <: HList, U] | |
(implicit st : Selector[T, U]): Selector[H :: T, U] = | |
new Selector[H :: T, U] { | |
def apply(l : H :: T) = st(l.tail) | |
} | |
} | |
} | |
import shapeless._ | |
object Test extends App { | |
type L = | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
// | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
// | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
// | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
// | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
// | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
// | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
// | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
// | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
// | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
// | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
// | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
// | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
// | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
// | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
// | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
// | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
// | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
// | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
// | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
// | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
// | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
// | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
// | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
// | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
// | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
// | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
// | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
// | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
// | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
// | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
// | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
// | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
// | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
// | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
// | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
// | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
// | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
// | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
// | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
// | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
// | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
// | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
// | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
// | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
// | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
// | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
// | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
// | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
// | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
Int :: | |
// | |
Boolean :: | |
HNil | |
val sel = Selector[L, Boolean] | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment