aboutsummaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorJon Pretty <jon.pretty@propensive.com>2017-06-23 14:20:40 +0200
committerJon Pretty <jon.pretty@propensive.com>2017-06-23 14:20:40 +0200
commit2fa873cd0322d21148cf01d94e485e04b03cdb7c (patch)
treead46dba1dfa747876cb0ee6f33e7c2163599511b /examples
parentf8ce6450c7dc1985db8ac29312bd76d3295257ab (diff)
downloadmagnolia-2fa873cd0322d21148cf01d94e485e04b03cdb7c.tar.gz
magnolia-2fa873cd0322d21148cf01d94e485e04b03cdb7c.tar.bz2
magnolia-2fa873cd0322d21148cf01d94e485e04b03cdb7c.zip
Tidied up and made it compile and run
Diffstat (limited to 'examples')
-rw-r--r--examples/src/main/scala/cats.scala23
-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[_]]
}
-