aboutsummaryrefslogtreecommitdiff
path: root/examples/src/main/scala/default.scala
diff options
context:
space:
mode:
authorJon Pretty <jon.pretty@propensive.com>2017-11-09 09:20:20 +0000
committerJon Pretty <jon.pretty@propensive.com>2017-11-09 09:20:20 +0000
commitc5c9c4f1432391f6af9202dd89872e5aae92ca58 (patch)
treec26bf5007c6204b9274993035c6e5cc9b9d4f9aa /examples/src/main/scala/default.scala
parent3f23cb5bca4ea8be889b714008a85141fe5e213c (diff)
downloadmagnolia-c5c9c4f1432391f6af9202dd89872e5aae92ca58.tar.gz
magnolia-c5c9c4f1432391f6af9202dd89872e5aae92ca58.tar.bz2
magnolia-c5c9c4f1432391f6af9202dd89872e5aae92ca58.zip
Added Scaladocs
Diffstat (limited to 'examples/src/main/scala/default.scala')
-rw-r--r--examples/src/main/scala/default.scala12
1 files changed, 12 insertions, 0 deletions
diff --git a/examples/src/main/scala/default.scala b/examples/src/main/scala/default.scala
index 55b0753..ea881df 100644
--- a/examples/src/main/scala/default.scala
+++ b/examples/src/main/scala/default.scala
@@ -6,19 +6,31 @@ import scala.language.higherKinds
import magnolia._
import scala.language.experimental.macros
+/** typeclass for providing a default value for a particular type */
trait Default[T] { def default: T }
+/** companion object and derivation object for [[Default]] */
object Default {
+
type Typeclass[T] = Default[T]
+
+ /** constructs a default for each parameter, using the constructor default (if provided),
+ * otherwise using a typeclass-provided default */
def combine[T](ctx: CaseClass[Default, T]): Default[T] = new Default[T] {
def default = ctx.construct { param => param.default.getOrElse(param.typeclass.default) }
}
+ /** chooses which subtype to delegate to */
def dispatch[T](ctx: SealedTrait[Default, T])(): Default[T] = new Default[T] {
def default: T = ctx.subtypes.head.typeclass.default
}
+ /** default value for a string; the empty string */
implicit val string: Default[String] = new Default[String] { def default = "" }
+
+ /** default value for ints; 0 */
implicit val int: Default[Int] = new Default[Int] { def default = 0 }
+
+ /** generates default instances of [[Default]] for case classes and sealed traits */
implicit def gen[T]: Default[T] = macro Magnolia.gen[T]
}