aboutsummaryrefslogtreecommitdiff
path: root/examples/src/main
diff options
context:
space:
mode:
authorJon Pretty <jon.pretty@propensive.com>2017-05-24 20:41:10 +0100
committerJon Pretty <jon.pretty@propensive.com>2017-05-24 20:41:10 +0100
commitb039a653e9e90530a76aef42df9215c151c65b67 (patch)
treeb925339332ed2824bb4a4910800fb0e923719c1a /examples/src/main
downloadmagnolia-b039a653e9e90530a76aef42df9215c151c65b67.tar.gz
magnolia-b039a653e9e90530a76aef42df9215c151c65b67.tar.bz2
magnolia-b039a653e9e90530a76aef42df9215c151c65b67.zip
Initial checkin of messy code which appears to be a PoC
Diffstat (limited to 'examples/src/main')
-rw-r--r--examples/src/main/scala/example.scala22
1 files changed, 22 insertions, 0 deletions
diff --git a/examples/src/main/scala/example.scala b/examples/src/main/scala/example.scala
new file mode 100644
index 0000000..7e9d80b
--- /dev/null
+++ b/examples/src/main/scala/example.scala
@@ -0,0 +1,22 @@
+package magnolia
+
+import language.experimental.macros
+
+trait Extractor[T] {
+ def extract(src: String): T
+}
+
+object Extractor extends Extractor_1 {
+
+ def apply[T](fn: String => T): Extractor[T] = new Extractor[T] {
+ def extract(source: String): T = fn(source)
+ }
+
+ implicit val intExtractor: Extractor[Int] = Extractor(_.toInt)
+ implicit val stringExtractor: Extractor[String] = Extractor(identity)
+ implicit val doubleExtractor: Extractor[Double] = Extractor(_.toDouble)
+}
+
+trait Extractor_1 {
+ implicit def generic[T]: Extractor[T] = macro Macros.generic[T, Extractor[_]]
+}