aboutsummaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
Diffstat (limited to 'examples')
-rw-r--r--examples/src/main/scala/example.scala9
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 {