aboutsummaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorJon Pretty <jon.pretty@propensive.com>2017-11-05 19:57:30 +0000
committerJon Pretty <jon.pretty@propensive.com>2017-11-05 19:57:30 +0000
commita42cceae99ca8517ecff77fecdb23eba4d2c1036 (patch)
tree8deb9af6764158556ba016a660aebaa5aa71723f /examples
parent3f9ee733ac73f31337433227eb6871efce18981c (diff)
downloadmagnolia-a42cceae99ca8517ecff77fecdb23eba4d2c1036.tar.gz
magnolia-a42cceae99ca8517ecff77fecdb23eba4d2c1036.tar.bz2
magnolia-a42cceae99ca8517ecff77fecdb23eba4d2c1036.zip
Deduplication within case class parameter typeclasses
Diffstat (limited to 'examples')
-rw-r--r--examples/src/main/scala/typeclasses.scala10
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)