aboutsummaryrefslogtreecommitdiff
path: root/benchmarks
diff options
context:
space:
mode:
authorJon Pretty <jon.pretty@propensive.com>2017-11-07 00:55:36 +0000
committerJon Pretty <jon.pretty@propensive.com>2017-11-07 00:55:36 +0000
commit1207383551b429560ac05e124349b24ff8b6dfda (patch)
tree923e5c537f5e53e2c6051b02a5b8e17c4bb3462b /benchmarks
parent1f49e614b1a2e363adbbea6ec510f094e195ace8 (diff)
downloadmagnolia-1207383551b429560ac05e124349b24ff8b6dfda.tar.gz
magnolia-1207383551b429560ac05e124349b24ff8b6dfda.tar.bz2
magnolia-1207383551b429560ac05e124349b24ff8b6dfda.zip
Benchmarking suite
Diffstat (limited to 'benchmarks')
-rwxr-xr-xbenchmarks/2.11/benchmark22
-rw-r--r--benchmarks/2.11/src/adt.scala43
-rw-r--r--benchmarks/2.11/src/kittens/complex.scala28
-rw-r--r--benchmarks/2.11/src/kittens/eq_10.scala18
-rw-r--r--benchmarks/2.11/src/kittens/eq_50.scala63
-rw-r--r--benchmarks/2.11/src/kittens/gadt_100.scala118
-rw-r--r--benchmarks/2.11/src/kittens/obj.scala118
-rw-r--r--benchmarks/2.11/src/kittens/show_10.scala18
-rw-r--r--benchmarks/2.11/src/kittens/show_50.scala63
-rw-r--r--benchmarks/2.11/src/kittens/show_tree_50.scala63
-rw-r--r--benchmarks/2.11/src/kittens/small_100.scala118
-rw-r--r--benchmarks/2.11/src/magnolia/complex.scala24
-rw-r--r--benchmarks/2.11/src/magnolia/eq_10.scala14
-rw-r--r--benchmarks/2.11/src/magnolia/eq_50.scala59
-rw-r--r--benchmarks/2.11/src/magnolia/gadt_100.scala113
-rw-r--r--benchmarks/2.11/src/magnolia/obj.scala114
-rw-r--r--benchmarks/2.11/src/magnolia/show_10.scala14
-rw-r--r--benchmarks/2.11/src/magnolia/show_50.scala58
-rw-r--r--benchmarks/2.11/src/magnolia/show_tree_50.scala58
-rw-r--r--benchmarks/2.11/src/magnolia/small_100.scala113
-rwxr-xr-xbenchmarks/2.12/benchmark22
-rw-r--r--benchmarks/2.12/src/adt.scala43
-rw-r--r--benchmarks/2.12/src/kittens/complex.scala28
-rw-r--r--benchmarks/2.12/src/kittens/eq_10.scala18
-rw-r--r--benchmarks/2.12/src/kittens/eq_50.scala63
-rw-r--r--benchmarks/2.12/src/kittens/gadt_100.scala118
-rw-r--r--benchmarks/2.12/src/kittens/obj.scala118
-rw-r--r--benchmarks/2.12/src/kittens/show_10.scala18
-rw-r--r--benchmarks/2.12/src/kittens/show_50.scala63
-rw-r--r--benchmarks/2.12/src/kittens/show_tree_50.scala63
-rw-r--r--benchmarks/2.12/src/kittens/small_100.scala118
-rw-r--r--benchmarks/2.12/src/magnolia/complex.scala24
-rw-r--r--benchmarks/2.12/src/magnolia/eq_10.scala14
-rw-r--r--benchmarks/2.12/src/magnolia/eq_50.scala59
-rw-r--r--benchmarks/2.12/src/magnolia/gadt_100.scala113
-rw-r--r--benchmarks/2.12/src/magnolia/obj.scala114
-rw-r--r--benchmarks/2.12/src/magnolia/show_10.scala14
-rw-r--r--benchmarks/2.12/src/magnolia/show_50.scala58
-rw-r--r--benchmarks/2.12/src/magnolia/show_tree_50.scala58
-rw-r--r--benchmarks/2.12/src/magnolia/small_100.scala113
-rwxr-xr-xbenchmarks/fetch.sh13
41 files changed, 2491 insertions, 0 deletions
diff --git a/benchmarks/2.11/benchmark b/benchmarks/2.11/benchmark
new file mode 100755
index 0000000..df652b4
--- /dev/null
+++ b/benchmarks/2.11/benchmark
@@ -0,0 +1,22 @@
+#!/bin/bash
+
+COUNT="$1"
+shift
+
+benchmark() {
+ DERIVATION="$1"
+ TEST="$2"
+ echo "$DERIVATION/$TEST:"
+ echo "src/adt.scala" > .script
+ for I in $(seq 1 $COUNT); do
+ echo "src/$DERIVATION/$TEST.scala" >> .script
+ done
+ cat .script | scalac-2.11 -Xexperimental -Xresident -d bin -cp $(ls lib/* | tr '\n' :)bin | ts -i -s '%M:%.S' > out.log
+ cat out.log | tail -n +2 | paste -d' ' - .script | sed 's/nsc.//g' | head -n -1
+ echo
+}
+
+for J in "$@"; do
+ benchmark magnolia "$J"
+ benchmark kittens "$J"
+done
diff --git a/benchmarks/2.11/src/adt.scala b/benchmarks/2.11/src/adt.scala
new file mode 100644
index 0000000..902d2d8
--- /dev/null
+++ b/benchmarks/2.11/src/adt.scala
@@ -0,0 +1,43 @@
+package adt
+
+sealed trait Tree
+case class Leaf(value: String) extends Tree
+case class Branch(left: Tree, right: Tree) extends Tree
+
+sealed trait GTree[+T]
+case class GLeaf[+T](value: String) extends GTree[T]
+case class GBranch[+T](left: GTree[T], right: GTree[T]) extends GTree[T]
+
+sealed trait Entity
+
+case class Company(name: String) extends Entity
+case class Human(name: String, age: Int) extends Entity
+case class Address(line1: String, occupant: Human)
+
+sealed trait Alphabet
+
+case class Greek(άλφα: Letter, βήτα: Letter, γάμα: Letter, δέλτα: Letter, έψιλον: Letter, ζήτα: Letter, ήτα: Letter, θήτα: Letter) extends Alphabet
+case class Cyrillic(б: Letter, в: Letter, г: Letter, д: Letter, ж: Letter, з: Letter) extends Alphabet
+case class Latin(a: Letter, b: Letter, c: Letter, d: Letter, e: Letter, f: Letter, g: Letter, h: Letter, i: Letter, j: Letter, k: Letter, l: Letter, m: Letter, n: Letter, o: Letter, p: Letter, q: Letter, r: Letter, s: Letter, t: Letter, u: Letter, v: Letter) extends Alphabet
+
+case class Letter(name: String, phonetic: String)
+case class Country(name: String, language: Language, leader: Person, existence: DateRange)
+case class Language(name: String, code: String, alphabet: Alphabet)
+case class Person(name: String, dateOfBirth: Date)
+case class Date(year: Int, month: Month, day: Int)
+
+case class DateRange(from: Date, toDate: Date)
+
+sealed trait Month
+case object Jan extends Month
+case object Feb extends Month
+case object Mar extends Month
+case object Apr extends Month
+case object May extends Month
+case object Jun extends Month
+case object Jul extends Month
+case object Aug extends Month
+case object Sep extends Month
+case object Oct extends Month
+case object Nov extends Month
+case object Dec extends Month
diff --git a/benchmarks/2.11/src/kittens/complex.scala b/benchmarks/2.11/src/kittens/complex.scala
new file mode 100644
index 0000000..70d0d95
--- /dev/null
+++ b/benchmarks/2.11/src/kittens/complex.scala
@@ -0,0 +1,28 @@
+import adt._
+import cats._
+import derived._
+import cats.Show
+import cats.instances.all._
+
+object Gen {
+ derive.eq[Country]
+ derive.eq[Country]
+ derive.eq[Country]
+ derive.eq[Country]
+ derive.eq[Country]
+ derive.eq[Country]
+ derive.eq[Country]
+ derive.eq[Country]
+ derive.eq[Country]
+ derive.eq[Country]
+ derive.eq[Country]
+ derive.eq[Country]
+ derive.eq[Country]
+ derive.eq[Country]
+ derive.eq[Country]
+ derive.eq[Country]
+ derive.eq[Country]
+ derive.eq[Country]
+ derive.eq[Country]
+ derive.eq[Country]
+}
diff --git a/benchmarks/2.11/src/kittens/eq_10.scala b/benchmarks/2.11/src/kittens/eq_10.scala
new file mode 100644
index 0000000..bed5915
--- /dev/null
+++ b/benchmarks/2.11/src/kittens/eq_10.scala
@@ -0,0 +1,18 @@
+import adt._
+import cats._
+import derived._
+import cats.Eq
+import cats.instances.all._
+
+object Gen {
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+}
diff --git a/benchmarks/2.11/src/kittens/eq_50.scala b/benchmarks/2.11/src/kittens/eq_50.scala
new file mode 100644
index 0000000..cac774d
--- /dev/null
+++ b/benchmarks/2.11/src/kittens/eq_50.scala
@@ -0,0 +1,63 @@
+import adt._
+import cats._
+import derived._
+import cats.Eq
+import cats.instances.all._
+
+object Gen {
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+
+}
diff --git a/benchmarks/2.11/src/kittens/gadt_100.scala b/benchmarks/2.11/src/kittens/gadt_100.scala
new file mode 100644
index 0000000..aa6710d
--- /dev/null
+++ b/benchmarks/2.11/src/kittens/gadt_100.scala
@@ -0,0 +1,118 @@
+import adt._
+import cats._
+import derived._
+import cats.eq
+import cats.instances.all._
+
+object Gen {
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+
+}
diff --git a/benchmarks/2.11/src/kittens/obj.scala b/benchmarks/2.11/src/kittens/obj.scala
new file mode 100644
index 0000000..c01199e
--- /dev/null
+++ b/benchmarks/2.11/src/kittens/obj.scala
@@ -0,0 +1,118 @@
+import adt._
+import cats._
+import derived._
+import cats.Show
+import cats.instances.all._
+
+object Gen {
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+
+}
diff --git a/benchmarks/2.11/src/kittens/show_10.scala b/benchmarks/2.11/src/kittens/show_10.scala
new file mode 100644
index 0000000..5c2a28c
--- /dev/null
+++ b/benchmarks/2.11/src/kittens/show_10.scala
@@ -0,0 +1,18 @@
+import adt._
+import cats._
+import derived._
+import cats.Show
+import cats.instances.all._
+
+object Gen {
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+}
diff --git a/benchmarks/2.11/src/kittens/show_50.scala b/benchmarks/2.11/src/kittens/show_50.scala
new file mode 100644
index 0000000..afd085b
--- /dev/null
+++ b/benchmarks/2.11/src/kittens/show_50.scala
@@ -0,0 +1,63 @@
+import adt._
+import cats._
+import derived._
+import cats.Show
+import cats.instances.all._
+
+object Gen {
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+
+}
diff --git a/benchmarks/2.11/src/kittens/show_tree_50.scala b/benchmarks/2.11/src/kittens/show_tree_50.scala
new file mode 100644
index 0000000..18ac6d9
--- /dev/null
+++ b/benchmarks/2.11/src/kittens/show_tree_50.scala
@@ -0,0 +1,63 @@
+import adt._
+import cats._
+import derived._
+import cats.Show
+import cats.instances.all._
+
+object Gen {
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+
+}
diff --git a/benchmarks/2.11/src/kittens/small_100.scala b/benchmarks/2.11/src/kittens/small_100.scala
new file mode 100644
index 0000000..51d922d
--- /dev/null
+++ b/benchmarks/2.11/src/kittens/small_100.scala
@@ -0,0 +1,118 @@
+import adt._
+import cats._
+import derived._
+import cats.Show
+import cats.instances.all._
+
+object Gen {
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+
+}
diff --git a/benchmarks/2.11/src/magnolia/complex.scala b/benchmarks/2.11/src/magnolia/complex.scala
new file mode 100644
index 0000000..f843c29
--- /dev/null
+++ b/benchmarks/2.11/src/magnolia/complex.scala
@@ -0,0 +1,24 @@
+import magnolia._, examples._
+
+object Gen {
+ Eq.generic[adt.Country]
+ Eq.generic[adt.Country]
+ Eq.generic[adt.Country]
+ Eq.generic[adt.Country]
+ Eq.generic[adt.Country]
+ Eq.generic[adt.Country]
+ Eq.generic[adt.Country]
+ Eq.generic[adt.Country]
+ Eq.generic[adt.Country]
+ Eq.generic[adt.Country]
+ Eq.generic[adt.Country]
+ Eq.generic[adt.Country]
+ Eq.generic[adt.Country]
+ Eq.generic[adt.Country]
+ Eq.generic[adt.Country]
+ Eq.generic[adt.Country]
+ Eq.generic[adt.Country]
+ Eq.generic[adt.Country]
+ Eq.generic[adt.Country]
+ Eq.generic[adt.Country]
+}
diff --git a/benchmarks/2.11/src/magnolia/eq_10.scala b/benchmarks/2.11/src/magnolia/eq_10.scala
new file mode 100644
index 0000000..b6adf78
--- /dev/null
+++ b/benchmarks/2.11/src/magnolia/eq_10.scala
@@ -0,0 +1,14 @@
+import magnolia._, examples._
+
+object Gen {
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+}
diff --git a/benchmarks/2.11/src/magnolia/eq_50.scala b/benchmarks/2.11/src/magnolia/eq_50.scala
new file mode 100644
index 0000000..b1dd036
--- /dev/null
+++ b/benchmarks/2.11/src/magnolia/eq_50.scala
@@ -0,0 +1,59 @@
+import magnolia._, examples._
+
+object Gen {
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+
+}
diff --git a/benchmarks/2.11/src/magnolia/gadt_100.scala b/benchmarks/2.11/src/magnolia/gadt_100.scala
new file mode 100644
index 0000000..e392642
--- /dev/null
+++ b/benchmarks/2.11/src/magnolia/gadt_100.scala
@@ -0,0 +1,113 @@
+import magnolia._, examples._
+
+object Gen {
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+}
diff --git a/benchmarks/2.11/src/magnolia/obj.scala b/benchmarks/2.11/src/magnolia/obj.scala
new file mode 100644
index 0000000..0dd82cf
--- /dev/null
+++ b/benchmarks/2.11/src/magnolia/obj.scala
@@ -0,0 +1,114 @@
+import magnolia._, examples._
+
+object Gen {
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+
+}
diff --git a/benchmarks/2.11/src/magnolia/show_10.scala b/benchmarks/2.11/src/magnolia/show_10.scala
new file mode 100644
index 0000000..c6f4a1c
--- /dev/null
+++ b/benchmarks/2.11/src/magnolia/show_10.scala
@@ -0,0 +1,14 @@
+import magnolia._, examples._
+
+object Gen {
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+}
diff --git a/benchmarks/2.11/src/magnolia/show_50.scala b/benchmarks/2.11/src/magnolia/show_50.scala
new file mode 100644
index 0000000..27cfbae
--- /dev/null
+++ b/benchmarks/2.11/src/magnolia/show_50.scala
@@ -0,0 +1,58 @@
+import magnolia._, examples._
+
+object Gen {
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+}
diff --git a/benchmarks/2.11/src/magnolia/show_tree_50.scala b/benchmarks/2.11/src/magnolia/show_tree_50.scala
new file mode 100644
index 0000000..a06513a
--- /dev/null
+++ b/benchmarks/2.11/src/magnolia/show_tree_50.scala
@@ -0,0 +1,58 @@
+import magnolia._, examples._
+
+object Gen {
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+}
diff --git a/benchmarks/2.11/src/magnolia/small_100.scala b/benchmarks/2.11/src/magnolia/small_100.scala
new file mode 100644
index 0000000..b9eb9ed
--- /dev/null
+++ b/benchmarks/2.11/src/magnolia/small_100.scala
@@ -0,0 +1,113 @@
+import magnolia._, examples._
+
+object Gen {
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+}
diff --git a/benchmarks/2.12/benchmark b/benchmarks/2.12/benchmark
new file mode 100755
index 0000000..744639d
--- /dev/null
+++ b/benchmarks/2.12/benchmark
@@ -0,0 +1,22 @@
+#!/bin/bash
+
+COUNT="$1"
+shift
+
+benchmark() {
+ DERIVATION="$1"
+ TEST="$2"
+ echo "$DERIVATION/$TEST:"
+ echo "src/adt.scala" > .script
+ for I in $(seq 1 $COUNT); do
+ echo "src/$DERIVATION/$TEST.scala" >> .script
+ done
+ cat .script | scalac-2.12 -Xresident -d bin -cp $(ls lib/* | tr '\n' :)bin | ts -i -s '%M:%.S' > out.log
+ cat out.log | tail -n +2 | paste -d' ' - .script | sed 's/nsc.//g' | head -n -1
+ echo
+}
+
+for J in "$@"; do
+ benchmark magnolia "$J"
+ benchmark kittens "$J"
+done
diff --git a/benchmarks/2.12/src/adt.scala b/benchmarks/2.12/src/adt.scala
new file mode 100644
index 0000000..902d2d8
--- /dev/null
+++ b/benchmarks/2.12/src/adt.scala
@@ -0,0 +1,43 @@
+package adt
+
+sealed trait Tree
+case class Leaf(value: String) extends Tree
+case class Branch(left: Tree, right: Tree) extends Tree
+
+sealed trait GTree[+T]
+case class GLeaf[+T](value: String) extends GTree[T]
+case class GBranch[+T](left: GTree[T], right: GTree[T]) extends GTree[T]
+
+sealed trait Entity
+
+case class Company(name: String) extends Entity
+case class Human(name: String, age: Int) extends Entity
+case class Address(line1: String, occupant: Human)
+
+sealed trait Alphabet
+
+case class Greek(άλφα: Letter, βήτα: Letter, γάμα: Letter, δέλτα: Letter, έψιλον: Letter, ζήτα: Letter, ήτα: Letter, θήτα: Letter) extends Alphabet
+case class Cyrillic(б: Letter, в: Letter, г: Letter, д: Letter, ж: Letter, з: Letter) extends Alphabet
+case class Latin(a: Letter, b: Letter, c: Letter, d: Letter, e: Letter, f: Letter, g: Letter, h: Letter, i: Letter, j: Letter, k: Letter, l: Letter, m: Letter, n: Letter, o: Letter, p: Letter, q: Letter, r: Letter, s: Letter, t: Letter, u: Letter, v: Letter) extends Alphabet
+
+case class Letter(name: String, phonetic: String)
+case class Country(name: String, language: Language, leader: Person, existence: DateRange)
+case class Language(name: String, code: String, alphabet: Alphabet)
+case class Person(name: String, dateOfBirth: Date)
+case class Date(year: Int, month: Month, day: Int)
+
+case class DateRange(from: Date, toDate: Date)
+
+sealed trait Month
+case object Jan extends Month
+case object Feb extends Month
+case object Mar extends Month
+case object Apr extends Month
+case object May extends Month
+case object Jun extends Month
+case object Jul extends Month
+case object Aug extends Month
+case object Sep extends Month
+case object Oct extends Month
+case object Nov extends Month
+case object Dec extends Month
diff --git a/benchmarks/2.12/src/kittens/complex.scala b/benchmarks/2.12/src/kittens/complex.scala
new file mode 100644
index 0000000..70d0d95
--- /dev/null
+++ b/benchmarks/2.12/src/kittens/complex.scala
@@ -0,0 +1,28 @@
+import adt._
+import cats._
+import derived._
+import cats.Show
+import cats.instances.all._
+
+object Gen {
+ derive.eq[Country]
+ derive.eq[Country]
+ derive.eq[Country]
+ derive.eq[Country]
+ derive.eq[Country]
+ derive.eq[Country]
+ derive.eq[Country]
+ derive.eq[Country]
+ derive.eq[Country]
+ derive.eq[Country]
+ derive.eq[Country]
+ derive.eq[Country]
+ derive.eq[Country]
+ derive.eq[Country]
+ derive.eq[Country]
+ derive.eq[Country]
+ derive.eq[Country]
+ derive.eq[Country]
+ derive.eq[Country]
+ derive.eq[Country]
+}
diff --git a/benchmarks/2.12/src/kittens/eq_10.scala b/benchmarks/2.12/src/kittens/eq_10.scala
new file mode 100644
index 0000000..bed5915
--- /dev/null
+++ b/benchmarks/2.12/src/kittens/eq_10.scala
@@ -0,0 +1,18 @@
+import adt._
+import cats._
+import derived._
+import cats.Eq
+import cats.instances.all._
+
+object Gen {
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+}
diff --git a/benchmarks/2.12/src/kittens/eq_50.scala b/benchmarks/2.12/src/kittens/eq_50.scala
new file mode 100644
index 0000000..cac774d
--- /dev/null
+++ b/benchmarks/2.12/src/kittens/eq_50.scala
@@ -0,0 +1,63 @@
+import adt._
+import cats._
+import derived._
+import cats.Eq
+import cats.instances.all._
+
+object Gen {
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+ derive.eq[Alphabet]
+
+}
diff --git a/benchmarks/2.12/src/kittens/gadt_100.scala b/benchmarks/2.12/src/kittens/gadt_100.scala
new file mode 100644
index 0000000..aa6710d
--- /dev/null
+++ b/benchmarks/2.12/src/kittens/gadt_100.scala
@@ -0,0 +1,118 @@
+import adt._
+import cats._
+import derived._
+import cats.eq
+import cats.instances.all._
+
+object Gen {
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+ derive.eq[GTree[String]]
+
+}
diff --git a/benchmarks/2.12/src/kittens/obj.scala b/benchmarks/2.12/src/kittens/obj.scala
new file mode 100644
index 0000000..c01199e
--- /dev/null
+++ b/benchmarks/2.12/src/kittens/obj.scala
@@ -0,0 +1,118 @@
+import adt._
+import cats._
+import derived._
+import cats.Show
+import cats.instances.all._
+
+object Gen {
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+ derive.show[Jan.type]
+
+}
diff --git a/benchmarks/2.12/src/kittens/show_10.scala b/benchmarks/2.12/src/kittens/show_10.scala
new file mode 100644
index 0000000..5c2a28c
--- /dev/null
+++ b/benchmarks/2.12/src/kittens/show_10.scala
@@ -0,0 +1,18 @@
+import adt._
+import cats._
+import derived._
+import cats.Show
+import cats.instances.all._
+
+object Gen {
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+}
diff --git a/benchmarks/2.12/src/kittens/show_50.scala b/benchmarks/2.12/src/kittens/show_50.scala
new file mode 100644
index 0000000..afd085b
--- /dev/null
+++ b/benchmarks/2.12/src/kittens/show_50.scala
@@ -0,0 +1,63 @@
+import adt._
+import cats._
+import derived._
+import cats.Show
+import cats.instances.all._
+
+object Gen {
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+ derive.show[Alphabet]
+
+}
diff --git a/benchmarks/2.12/src/kittens/show_tree_50.scala b/benchmarks/2.12/src/kittens/show_tree_50.scala
new file mode 100644
index 0000000..18ac6d9
--- /dev/null
+++ b/benchmarks/2.12/src/kittens/show_tree_50.scala
@@ -0,0 +1,63 @@
+import adt._
+import cats._
+import derived._
+import cats.Show
+import cats.instances.all._
+
+object Gen {
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+ derive.show[Tree]
+
+}
diff --git a/benchmarks/2.12/src/kittens/small_100.scala b/benchmarks/2.12/src/kittens/small_100.scala
new file mode 100644
index 0000000..51d922d
--- /dev/null
+++ b/benchmarks/2.12/src/kittens/small_100.scala
@@ -0,0 +1,118 @@
+import adt._
+import cats._
+import derived._
+import cats.Show
+import cats.instances.all._
+
+object Gen {
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+ derive.show[Letter]
+
+}
diff --git a/benchmarks/2.12/src/magnolia/complex.scala b/benchmarks/2.12/src/magnolia/complex.scala
new file mode 100644
index 0000000..f843c29
--- /dev/null
+++ b/benchmarks/2.12/src/magnolia/complex.scala
@@ -0,0 +1,24 @@
+import magnolia._, examples._
+
+object Gen {
+ Eq.generic[adt.Country]
+ Eq.generic[adt.Country]
+ Eq.generic[adt.Country]
+ Eq.generic[adt.Country]
+ Eq.generic[adt.Country]
+ Eq.generic[adt.Country]
+ Eq.generic[adt.Country]
+ Eq.generic[adt.Country]
+ Eq.generic[adt.Country]
+ Eq.generic[adt.Country]
+ Eq.generic[adt.Country]
+ Eq.generic[adt.Country]
+ Eq.generic[adt.Country]
+ Eq.generic[adt.Country]
+ Eq.generic[adt.Country]
+ Eq.generic[adt.Country]
+ Eq.generic[adt.Country]
+ Eq.generic[adt.Country]
+ Eq.generic[adt.Country]
+ Eq.generic[adt.Country]
+}
diff --git a/benchmarks/2.12/src/magnolia/eq_10.scala b/benchmarks/2.12/src/magnolia/eq_10.scala
new file mode 100644
index 0000000..b6adf78
--- /dev/null
+++ b/benchmarks/2.12/src/magnolia/eq_10.scala
@@ -0,0 +1,14 @@
+import magnolia._, examples._
+
+object Gen {
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+}
diff --git a/benchmarks/2.12/src/magnolia/eq_50.scala b/benchmarks/2.12/src/magnolia/eq_50.scala
new file mode 100644
index 0000000..b1dd036
--- /dev/null
+++ b/benchmarks/2.12/src/magnolia/eq_50.scala
@@ -0,0 +1,59 @@
+import magnolia._, examples._
+
+object Gen {
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+ Eq.generic[adt.Alphabet]
+
+}
diff --git a/benchmarks/2.12/src/magnolia/gadt_100.scala b/benchmarks/2.12/src/magnolia/gadt_100.scala
new file mode 100644
index 0000000..e392642
--- /dev/null
+++ b/benchmarks/2.12/src/magnolia/gadt_100.scala
@@ -0,0 +1,113 @@
+import magnolia._, examples._
+
+object Gen {
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+ Eq.generic[adt.GTree[String]]
+}
diff --git a/benchmarks/2.12/src/magnolia/obj.scala b/benchmarks/2.12/src/magnolia/obj.scala
new file mode 100644
index 0000000..0dd82cf
--- /dev/null
+++ b/benchmarks/2.12/src/magnolia/obj.scala
@@ -0,0 +1,114 @@
+import magnolia._, examples._
+
+object Gen {
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+ Show.generic[adt.Jan.type]
+
+}
diff --git a/benchmarks/2.12/src/magnolia/show_10.scala b/benchmarks/2.12/src/magnolia/show_10.scala
new file mode 100644
index 0000000..c6f4a1c
--- /dev/null
+++ b/benchmarks/2.12/src/magnolia/show_10.scala
@@ -0,0 +1,14 @@
+import magnolia._, examples._
+
+object Gen {
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+}
diff --git a/benchmarks/2.12/src/magnolia/show_50.scala b/benchmarks/2.12/src/magnolia/show_50.scala
new file mode 100644
index 0000000..27cfbae
--- /dev/null
+++ b/benchmarks/2.12/src/magnolia/show_50.scala
@@ -0,0 +1,58 @@
+import magnolia._, examples._
+
+object Gen {
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+ Show.generic[adt.Alphabet]
+}
diff --git a/benchmarks/2.12/src/magnolia/show_tree_50.scala b/benchmarks/2.12/src/magnolia/show_tree_50.scala
new file mode 100644
index 0000000..a06513a
--- /dev/null
+++ b/benchmarks/2.12/src/magnolia/show_tree_50.scala
@@ -0,0 +1,58 @@
+import magnolia._, examples._
+
+object Gen {
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+ Show.generic[adt.Tree]
+}
diff --git a/benchmarks/2.12/src/magnolia/small_100.scala b/benchmarks/2.12/src/magnolia/small_100.scala
new file mode 100644
index 0000000..b9eb9ed
--- /dev/null
+++ b/benchmarks/2.12/src/magnolia/small_100.scala
@@ -0,0 +1,113 @@
+import magnolia._, examples._
+
+object Gen {
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+ Show.generic[adt.Letter]
+}
diff --git a/benchmarks/fetch.sh b/benchmarks/fetch.sh
new file mode 100755
index 0000000..6644a06
--- /dev/null
+++ b/benchmarks/fetch.sh
@@ -0,0 +1,13 @@
+#!/bin/sh
+mkdir -p 2.12/lib 2.11/lib
+for V in 2.12 2.11; do
+ wget -O $V/lib/export-hook.jar "http://repo1.maven.org/maven2/org/typelevel/export-hook_$V/1.2.0/export-hook_$V-1.2.0.jar"
+ wget -O $V/lib/alleycats-core.jar "http://repo1.maven.org/maven2/org/typelevel/alleycats-core_$V/1.0.0-RC1/alleycats-core_$V-1.0.0-RC1.jar"
+ wget -O $V/lib/machinist.jar "http://repo1.maven.org/maven2/org/typelevel/machinist_$V/0.6.2/machinist_$V-0.6.2.jar"
+ wget -O $V/lib/macro-compat.jar "http://repo1.maven.org/maven2/org/typelevel/macro-compat_$V/1.1.1/macro-compat_$V-1.1.1.jar"
+ wget -O $V/lib/shapeless.jar "http://repo1.maven.org/maven2/com/chuusai/shapeless_$V/2.3.2/shapeless_$V-2.3.2.jar"
+ wget -O $V/lib/cats-macros.jar "http://repo1.maven.org/maven2/org/typelevel/cats-macros_$V/1.0.0-RC1/cats-macros_$V-1.0.0-RC1.jar"
+ wget -O $V/lib/cats-kernel.jar "http://repo1.maven.org/maven2/org/typelevel/cats-kernel_$V/1.0.0-RC1/cats-kernel_$V-1.0.0-RC1.jar"
+ wget -O $V/lib/cats-core.jar "http://repo1.maven.org/maven2/org/typelevel/cats-core_$V/1.0.0-RC1/cats-core_$V-1.0.0-RC1.jar"
+ wget -O $V/lib/kittens.jar "http://repo1.maven.org/maven2/org/typelevel/kittens_$V/1.0.0-RC1/kittens_$V-1.0.0-RC1.jar"
+done