From ec3f9d345e8a30e4e8c0b5885c718deb6cacb88c Mon Sep 17 00:00:00 2001 From: Jon Pretty Date: Mon, 12 Jun 2017 11:55:13 +0200 Subject: Fixes for substitution of Lazy values --- examples/src/main/scala/example.scala | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) (limited to 'examples/src/main/scala') diff --git a/examples/src/main/scala/example.scala b/examples/src/main/scala/example.scala index c719ad8..5dd1f47 100644 --- a/examples/src/main/scala/example.scala +++ b/examples/src/main/scala/example.scala @@ -1,11 +1,13 @@ -package magnolia +package magnolia.examples + +import magnolia._ import language.experimental.macros import language.higherKinds -case class Thing(str: String) { +/*case class Thing(str: String) { def access(path: String): Thing = Thing(s"$str.$path") } @@ -81,3 +83,29 @@ trait Serializer_1 extends Serializer_2 { trait Serializer_2 { implicit def generic[T]: Serializer[T] = macro Macros.magnolia[T, Serializer[_]] } +*/ + +object `package` { + implicit class Showable[T: Show](t: T) { + def show: String = implicitly[Show[T]].show(t) + } +} + +sealed trait Tree +case class Branch(left: Tree, right: Tree) extends Tree +case class Leaf(value: Int) extends Tree + +trait Show[T] { def show(t: T): String } +object Show extends Show_1 { + implicit val showInt: Show[Int] = _.toString + 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: List[String]): String = xs.mkString("(", ", ", ")") + } +} + +trait Show_1 { + implicit def generic[T]: Show[T] = macro Macros.magnolia[T, Show[_]] +} -- cgit v1.2.3