diff options
Diffstat (limited to 'examples/src/main')
-rw-r--r-- | examples/src/main/scala/example.scala | 22 |
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[_]] +} |