diff options
Diffstat (limited to 'examples/src/main/scala/example.scala')
-rw-r--r-- | examples/src/main/scala/example.scala | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/examples/src/main/scala/example.scala b/examples/src/main/scala/example.scala index 23c0e86..6a6a1cc 100644 --- a/examples/src/main/scala/example.scala +++ b/examples/src/main/scala/example.scala @@ -1,6 +1,9 @@ package magnolia import language.experimental.macros +import language.higherKinds + + case class Thing(str: String) { def access(path: String): Thing = Thing(s"$str.$path") @@ -27,6 +30,12 @@ object Extractor extends Extractor_1 { implicit val stringExtractor: Extractor[String] = Extractor(_.str) implicit val doubleExtractor: Extractor[Double] = Extractor(_.str.length.toDouble) + implicit val dereferencer: Dereferencer[Extractor] { type Value = Thing } = new Dereferencer[Extractor] { + type Value = Thing + def dereference(value: Thing, param: String): Thing = value.access(param) + def delegate[T](extractor: Extractor[T], value: Thing): T = extractor.extract(value) + } + } trait Extractor_1 extends Extractor_2 { |