diff options
author | Jon Pretty <jon.pretty@propensive.com> | 2017-06-23 14:20:40 +0200 |
---|---|---|
committer | Jon Pretty <jon.pretty@propensive.com> | 2017-06-23 14:20:40 +0200 |
commit | 2fa873cd0322d21148cf01d94e485e04b03cdb7c (patch) | |
tree | ad46dba1dfa747876cb0ee6f33e7c2163599511b /examples/src | |
parent | f8ce6450c7dc1985db8ac29312bd76d3295257ab (diff) | |
download | magnolia-2fa873cd0322d21148cf01d94e485e04b03cdb7c.tar.gz magnolia-2fa873cd0322d21148cf01d94e485e04b03cdb7c.tar.bz2 magnolia-2fa873cd0322d21148cf01d94e485e04b03cdb7c.zip |
Tidied up and made it compile and run
Diffstat (limited to 'examples/src')
-rw-r--r-- | examples/src/main/scala/cats.scala | 23 | ||||
-rw-r--r-- | examples/src/main/scala/eq.scala (renamed from examples/src/main/scala/example.scala) | 48 |
2 files changed, 19 insertions, 52 deletions
diff --git a/examples/src/main/scala/cats.scala b/examples/src/main/scala/cats.scala index 08690c2..8d33a0f 100644 --- a/examples/src/main/scala/cats.scala +++ b/examples/src/main/scala/cats.scala @@ -1,23 +1,22 @@ -package magnolia.examples.cats +package magnolia.examples import scala.collection.immutable.ListMap import scala.language.experimental.macros -import scala.language.higherKinds import cats.Show import magnolia.ContravariantDerivation import magnolia.Macros -object instances extends instances1 { +object catsShowDerivation { - implicit val showDerivation = new ContravariantDerivation[Show] { - type Return = String - def call[T](show: Show[T], value: T): String = show.show(value) - def construct[T](body: T => String): Show[T] = body(_) - def join(xs: ListMap[String, String]): String = xs.map { case (k, v) => s"$k=$v" }.mkString("{", ", ", "}") - } -} - -trait instances1 { + implicit val showDerivation: ContravariantDerivation[Show] = + new ContravariantDerivation[Show] { + type Return = String + def call[T](show: Show[T], value: T): String = show.show(value) + def construct[T](body: T => String): Show[T] = body(_) + def join(xs: ListMap[String, String]): String = + xs.map { case (k, v) => s"$k=$v" }.mkString("{", ", ", "}") + } + implicit def genericShow[T]: Show[T] = macro Macros.magnolia[T, Show[_]] } diff --git a/examples/src/main/scala/example.scala b/examples/src/main/scala/eq.scala index 6c289cb..30e7869 100644 --- a/examples/src/main/scala/example.scala +++ b/examples/src/main/scala/eq.scala @@ -3,26 +3,19 @@ package magnolia.examples import magnolia._ import language.experimental.macros -import language.higherKinds import collection.immutable.ListMap - object `package` { - implicit class Showable[T: Show](t: T) { - def show: String = implicitly[Show[T]].show(t) - } - implicit val showString: Show[String] = identity - implicit val showBool: Show[Boolean] = _.toString - implicit def showList[T: Show]: Show[List[T]] = xs => xs.map { x => s"list:${implicitly[Show[T]].show(x)}" }.mkString(";") - implicit def showSet[T: Show]: Show[Set[T]] = s => "set" - implicit class Equable[T: Eq](t: T) { def isEqualTo(other: T): Boolean = implicitly[Eq[T]].isEqual(t, other) } + implicit val eqString: Eq[String] = _ == _ implicit val eqBool: Eq[Boolean] = _ == _ + implicit def eqList[T: Eq]: Eq[List[T]] = (l1, l2) => l1.size == l2.size && (l1 zip l2).forall { case (e1, e2) => e1 isEqualTo e2 } + implicit def eqSet[T: Eq]: Eq[Set[T]] = (s1, s2) => s1.size == s2.size && (s1 zip s2).forall { case (e1, e2) => e1 isEqualTo e2 } } @@ -37,46 +30,21 @@ case class Organization(name: String, contacts: Set[Person]) extends Entity case class Address(lines: List[String], country: Country) case class Country(name: String, code: String, salesTax: Boolean) -trait Show[T] { def show(t: T): String } -object Show extends Show_1 { - implicit val showInt: Show[Int] = _.toString - implicit val showString: Show[String] = identity - implicit val showBool: Show[Boolean] = _.toString - implicit def showList[T: Show]: Show[List[T]] = xs => xs.map { x => s"list:${implicitly[Show[T]].show(x)}" }.mkString(";") - implicit def showSet[T: Show]: Show[Set[T]] = s => "set" - - implicit val derivation = new ContravariantDerivation[Show] { - type Return = String - def call[T](show: Show[T], value: T): String = show.show(value) - def construct[T](body: T => String): Show[T] = body(_) - def join(xs: ListMap[String, String]): String = xs.map { case (k, v) => s"$k=$v" }.mkString("{", ", ", "}") - } - - implicit class Showable[T: Show](t: T) { - def show: String = implicitly[Show[T]].show(t) - } -} - -trait Show_1 { - implicit def generic[T]: Show[T] = macro Macros.magnolia[T, Show[_]] -} - trait Eq[T] { def isEqual(a: T, b: T): Boolean } -object Eq extends Eq_1 { +object Eq { implicit val eqInt: Eq[Int] = _ == _ - implicit val derivation = new ContravariantDerivation2[Eq] { + implicit val derivation: ContravariantDerivation2[Eq] = new ContravariantDerivation2[Eq] { type Return = Boolean + def call[T](eq: Eq[T], value1: T, value2: T): Boolean = if(value1.getClass == value2.getClass) eq.isEqual(value1, value2) else false + def construct[T](body: (T, T) => Boolean): Eq[T] = body(_, _) def join(elements: ListMap[String, Boolean]): Boolean = elements.forall(_._2) } -} - -trait Eq_1 { + implicit def generic[T]: Eq[T] = macro Macros.magnolia[T, Eq[_]] } - |