aboutsummaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorJon Pretty <jon.pretty@propensive.com>2017-06-11 16:04:15 +0200
committerJon Pretty <jon.pretty@propensive.com>2017-06-11 16:04:15 +0200
commitf22b602f0180500e45db76ec20f6bfd3f2450842 (patch)
treeebcf58489e01a535a842fd5e937bb7145b8f5363 /examples
parent092075d1eeca2dde829cba67bf3a96ef62738b15 (diff)
downloadmagnolia-f22b602f0180500e45db76ec20f6bfd3f2450842.tar.gz
magnolia-f22b602f0180500e45db76ec20f6bfd3f2450842.tar.bz2
magnolia-f22b602f0180500e45db76ec20f6bfd3f2450842.zip
Starting to move towards typeclass-based implementation
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 {