Standard Given Instances

The StdLibGivens trait provides standard Scala type class instances Numeric, Integral, Fractional for newtype wrappers (only works for newtypes which do not have validation).

Examples

For the upcoming examples let's define some newtypes and values:

import yantl.*

object Score extends Newtype.WithoutValidationOf[Long] with StdLibGivens with math.Integral.ExtraImplicits
type Score = Score.Type

object ScoreFloat extends Newtype.WithoutValidationOf[Float] with StdLibGivens with math.Fractional.ExtraImplicits
type ScoreFloat = ScoreFloat.Type

val score1 = Score(50)
// score1: Type = 50L
val score2 = Score(100)
// score2: Type = 100L

val scoreFloat1 = ScoreFloat(50)
// scoreFloat1: Type = 50.0F
val scoreFloat2 = ScoreFloat(100)
// scoreFloat2: Type = 100.0F

Numeric

Brings +, -, * operations:

val addition = score1 + score2
// addition: Type = 150L
val subtraction = score1 - score2
// subtraction: Type = -50L
val multiplication = score1 * score2
// multiplication: Type = 5000L

Integral

Brings / and % operations for natural numbers (like Int, Long)

val division = score1 / score2
// division: Type = 0L
val modulus = score1 % score2
// modulus: Type = 50L

Fractional

Brings / operation for real numbers (like Float, Double)

val divisionFloat = scoreFloat1 / scoreFloat2
// divisionFloat: Type = 0.5F