From 9ff2305bcdd742529bd184ba90ecdef32ca2fe4d Mon Sep 17 00:00:00 2001 From: Jon Pretty Date: Sun, 11 Jun 2017 16:56:44 +0200 Subject: Generalized for typeclass-based extension --- examples/src/main/scala/example.scala | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'examples/src') diff --git a/examples/src/main/scala/example.scala b/examples/src/main/scala/example.scala index 6a6a1cc..e61f8bd 100644 --- a/examples/src/main/scala/example.scala +++ b/examples/src/main/scala/example.scala @@ -34,6 +34,12 @@ object Extractor extends Extractor_1 { 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) + def combine[Supertype, Right <: Supertype](left: Extractor[_ <: Supertype], + right: Extractor[Right]): Extractor[Supertype] = left.orElse(right) + + def construct[T](body: Thing => T): Extractor[T] = new Extractor[T] { + def extract(source: Thing): T = body(source) + } } } -- cgit v1.2.3