diff options
author | Jon Pretty <jon.pretty@propensive.com> | 2017-11-05 19:57:30 +0000 |
---|---|---|
committer | Jon Pretty <jon.pretty@propensive.com> | 2017-11-05 19:57:30 +0000 |
commit | a42cceae99ca8517ecff77fecdb23eba4d2c1036 (patch) | |
tree | 8deb9af6764158556ba016a660aebaa5aa71723f /examples/src/main/scala | |
parent | 3f9ee733ac73f31337433227eb6871efce18981c (diff) | |
download | magnolia-a42cceae99ca8517ecff77fecdb23eba4d2c1036.tar.gz magnolia-a42cceae99ca8517ecff77fecdb23eba4d2c1036.tar.bz2 magnolia-a42cceae99ca8517ecff77fecdb23eba4d2c1036.zip |
Deduplication within case class parameter typeclasses
Diffstat (limited to 'examples/src/main/scala')
-rw-r--r-- | examples/src/main/scala/typeclasses.scala | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/examples/src/main/scala/typeclasses.scala b/examples/src/main/scala/typeclasses.scala index c79a6d7..aaa74fd 100644 --- a/examples/src/main/scala/typeclasses.scala +++ b/examples/src/main/scala/typeclasses.scala @@ -19,7 +19,7 @@ object Show { }.mkString(s"${context.typeName.split("\\.").last}(", ",", ")") } - def split[T](subclasses: List[Subclass[Typeclass, T]])(value: T): String = + def dispatch[T](subclasses: Seq[Subclass[Typeclass, T]])(value: T): String = subclasses.map { sub => sub.cast.andThen { value => sub.typeclass.show(sub.cast(value)) } }.reduce(_ orElse _)(value) @@ -38,7 +38,7 @@ object Eq { context.parameters.forall { param => param.typeclass.equal(param.dereference(value1), param.dereference(value2)) } } - def split[T](subclasses: List[Subclass[Eq, T]]): Eq[T] = new Eq[T] { + def dispatch[T](subclasses: Seq[Subclass[Eq, T]]): Eq[T] = new Eq[T] { def equal(value1: T, value2: T) = subclasses.map { case subclass => subclass.cast.andThen { value => subclass.typeclass.equal(subclass.cast(value1), subclass.cast(value2)) } @@ -58,7 +58,7 @@ object Default { def default = context.construct { param => param.typeclass.default } } - def split[T](subclasses: List[Subclass[Default, T]])(): Default[T] = new Default[T] { + def dispatch[T](subclasses: Seq[Subclass[Default, T]])(): Default[T] = new Default[T] { def default = subclasses.head.typeclass.default } @@ -73,7 +73,7 @@ object Decoder { def join[T](context: JoinContext[Decoder, T])(value: String): T = context.construct { param => param.typeclass.decode(value) } - def split[T](subclasses: List[Subclass[Decoder, T]])(param: String): T = + def dispatch[T](subclasses: Seq[Subclass[Decoder, T]])(param: String): T = subclasses.map { subclass => { case _ if decodes(subclass.typeclass, param) => subclass.typeclass.decode(param) }: PartialFunction[String, T] }.reduce(_ orElse _)(param) @@ -106,7 +106,7 @@ case class Cyrillic(б: Letter, в: Letter, г: Letter, д: Letter, ж: Letter, case class Latin(a: Letter, b: Letter, c: Letter, d: Letter, e: Letter, f: Letter, g: Letter, h: Letter, i: Letter, j: Letter, k: Letter, l: Letter, m: Letter) extends Alphabet case class Letter(name: String, phonetic: String) -//case class Country(name: String, language: Language, leader: Person) +case class Country(name: String, language: Language, leader: Person) case class Language(name: String, code: String, alphabet: Alphabet) //case class Person(name: String, dateOfBirth: Date) case class Date(year: Int, month: Month, day: Int) |