Skip to content

Commit 400ccdd

Browse files
committed
Reduce jar size by using abstract classes
Traits generate bridge methods in every subclass
1 parent 96c4c96 commit 400ccdd

File tree

88 files changed

+445
-291
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

88 files changed

+445
-291
lines changed

core/src/main/scala-2.12/cats/instances/all.scala

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ package cats
2323
package instances
2424

2525
abstract class AllInstancesBinCompat
26-
extends AllInstances
26+
extends AbstractAllInstances
2727
with AllInstancesBinCompat0
2828
with AllInstancesBinCompat1
2929
with AllInstancesBinCompat2
@@ -34,6 +34,8 @@ abstract class AllInstancesBinCompat
3434
with AllInstancesBinCompat7
3535
with AllInstancesBinCompat8
3636

37+
abstract private[cats] class AbstractAllInstances extends AbstractAnyValInstances with AllInstances
38+
3739
trait AllInstances
3840
extends AnyValInstances
3941
with BigIntInstances

core/src/main/scala-2.12/cats/instances/package.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ package object instances {
7777
object string extends StringInstances
7878
object tailRec extends TailRecInstances
7979
object try_ extends TryInstances
80-
object tuple extends TupleInstances with Tuple2InstancesBinCompat0
80+
object tuple extends AbstractTupleInstances with Tuple2InstancesBinCompat0
8181
object unit extends UnitInstances
8282
object uuid extends UUIDInstances
8383
object vector extends VectorInstances with VectorInstancesBinCompat0

core/src/main/scala-2.13+/cats/data/NonEmptyLazyList.scala

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -514,9 +514,10 @@ sealed abstract private[data] class NonEmptyLazyListInstances extends NonEmptyLa
514514
NonEmptyLazyList
515515
] & NonEmptyAlternative[NonEmptyLazyList] & Align[NonEmptyLazyList] =
516516
new AbstractNonEmptyInstances[LazyList, NonEmptyLazyList] with Align[NonEmptyLazyList] {
517-
518517
def extract[A](fa: NonEmptyLazyList[A]): A = fa.head
519518

519+
override def split[A](fa: NonEmptyLazyList[A]): (A, LazyList[A]) = (fa.head, fa.tail)
520+
520521
def nonEmptyTraverse[G[_]: Apply, A, B](fa: NonEmptyLazyList[A])(f: A => G[B]): G[NonEmptyLazyList[B]] = {
521522
def loop(head: A, tail: LazyList[A]): Eval[G[NonEmptyLazyList[B]]] =
522523
tail.headOption.fold(Eval.now(Apply[G].map(f(head))(NonEmptyLazyList(_)))) { h =>
@@ -526,9 +527,12 @@ sealed abstract private[data] class NonEmptyLazyListInstances extends NonEmptyLa
526527
loop(fa.head, fa.tail).value
527528
}
528529

529-
def reduceLeftTo[A, B](fa: NonEmptyLazyList[A])(f: A => B)(g: (B, A) => B): B = fa.reduceLeftTo(f)(g)
530+
override def reduceLeftTo[A, B](fa: NonEmptyLazyList[A])(f: A => B)(g: (B, A) => B): B =
531+
fa.reduceLeftTo(f)(g)
530532

531-
def reduceRightTo[A, B](fa: NonEmptyLazyList[A])(f: A => B)(g: (A, cats.Eval[B]) => cats.Eval[B]): cats.Eval[B] =
533+
override def reduceRightTo[A, B](
534+
fa: NonEmptyLazyList[A]
535+
)(f: A => B)(g: (A, cats.Eval[B]) => cats.Eval[B]): cats.Eval[B] =
532536
fa.tail match {
533537
case head +: tail =>
534538
val nell = NonEmptyLazyList.fromLazyListPrepend(head, tail)

core/src/main/scala-2.13+/cats/data/ZipLazyList.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ object ZipLazyList {
2929
def apply[A](value: LazyList[A]): ZipLazyList[A] = new ZipLazyList(value)
3030

3131
implicit val catsDataAlternativeForZipLazyList: Alternative[ZipLazyList] & CommutativeApplicative[ZipLazyList] =
32-
new Alternative[ZipLazyList] with CommutativeApplicative[ZipLazyList] {
32+
new Apply.AbstractApply[ZipLazyList] with Alternative[ZipLazyList] with CommutativeApplicative[ZipLazyList] {
3333
def pure[A](x: A): ZipLazyList[A] = new ZipLazyList(LazyList.continually(x))
3434

3535
override def map[A, B](fa: ZipLazyList[A])(f: (A) => B): ZipLazyList[B] =

core/src/main/scala-2.13+/cats/data/ZipStream.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ object ZipStream {
3131
def apply[A](value: Stream[A]): ZipStream[A] = new ZipStream(value)
3232

3333
implicit val catsDataAlternativeForZipStream: Alternative[ZipStream] & CommutativeApplicative[ZipStream] =
34-
new Alternative[ZipStream] with CommutativeApplicative[ZipStream] {
34+
new Apply.AbstractApply[ZipStream] with Alternative[ZipStream] with CommutativeApplicative[ZipStream] {
3535
def pure[A](x: A): ZipStream[A] = new ZipStream(Stream.continually(x))
3636

3737
override def map[A, B](fa: ZipStream[A])(f: (A) => B): ZipStream[B] =

core/src/main/scala-2.13+/cats/instances/all.scala

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ package cats
2323
package instances
2424

2525
abstract class AllInstancesBinCompat
26-
extends AllInstances
26+
extends AbstractAllInstances
2727
with AllInstancesBinCompat0
2828
with AllInstancesBinCompat1
2929
with AllInstancesBinCompat2
@@ -35,6 +35,8 @@ abstract class AllInstancesBinCompat
3535
with AllInstancesBinCompat8
3636
with AllInstancesBinCompat9
3737

38+
abstract private[cats] class AbstractAllInstances extends AbstractAnyValInstances with AllInstances
39+
3840
trait AllInstances
3941
extends AnyValInstances
4042
with ArraySeqInstances

core/src/main/scala-2.13+/cats/instances/arraySeq.scala

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,13 @@ trait ArraySeqInstances extends cats.kernel.instances.ArraySeqInstances {
4242
private[cats] object ArraySeqInstances {
4343
final private val stdInstances
4444
: Traverse[ArraySeq] & Monad[ArraySeq] & Alternative[ArraySeq] & CoflatMap[ArraySeq] & Align[ArraySeq] =
45-
new Traverse[ArraySeq]
45+
new FlatMap.FoldableFlatMap[ArraySeq]
46+
with Traverse[ArraySeq]
4647
with Monad[ArraySeq]
4748
with Alternative[ArraySeq]
4849
with CoflatMap[ArraySeq]
4950
with Align[ArraySeq] {
51+
5052
def empty[A]: ArraySeq[A] =
5153
ArraySeq.untagged.empty
5254

core/src/main/scala-2.13+/cats/instances/lazyList.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ trait LazyListInstances extends cats.kernel.instances.LazyListInstances {
3535

3636
implicit val catsStdInstancesForLazyList
3737
: Traverse[LazyList] & Alternative[LazyList] & Monad[LazyList] & CoflatMap[LazyList] & Align[LazyList] =
38-
new Traverse[LazyList]
38+
new FlatMap.FoldableFlatMap[LazyList]
39+
with Traverse[LazyList]
3940
with Alternative[LazyList]
4041
with Monad[LazyList]
4142
with CoflatMap[LazyList]

core/src/main/scala-2.13+/cats/instances/package.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ package object instances {
8181
object string extends StringInstances
8282
object tailRec extends TailRecInstances
8383
object try_ extends TryInstances
84-
object tuple extends TupleInstances with Tuple2InstancesBinCompat0
84+
object tuple extends AbstractTupleInstances with Tuple2InstancesBinCompat0
8585
object unit extends UnitInstances
8686
object uuid extends UUIDInstances
8787
object vector extends VectorInstances with VectorInstancesBinCompat0

core/src/main/scala-2.13+/cats/instances/stream.scala

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,12 @@ trait StreamInstances extends cats.kernel.instances.StreamInstances {
3434
@deprecated("Use cats.instances.lazyList", "2.0.0-RC2")
3535
implicit val catsStdInstancesForStream
3636
: Traverse[Stream] & Alternative[Stream] & Monad[Stream] & CoflatMap[Stream] & Align[Stream] =
37-
new Traverse[Stream] with Alternative[Stream] with Monad[Stream] with CoflatMap[Stream] with Align[Stream] {
37+
new FlatMap.FoldableFlatMap[Stream]
38+
with Traverse[Stream]
39+
with Alternative[Stream]
40+
with Monad[Stream]
41+
with CoflatMap[Stream]
42+
with Align[Stream] {
3843

3944
def empty[A]: Stream[A] = Stream.Empty
4045

0 commit comments

Comments
 (0)