aboutsummaryrefslogtreecommitdiff
path: root/examples/src/main
diff options
context:
space:
mode:
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[_]]
+}