package scalaz

import java.math.BigInteger

sealed trait BigIntegerMultiplication extends NewType[BigInteger]

sealed trait BigIntMultiplication extends NewType[BigInt]

sealed trait ByteMultiplication extends NewType[Byte]

sealed trait CharMultiplication extends NewType[Char]

sealed trait IntMultiplication extends NewType[Int]

sealed trait LongMultiplication extends NewType[Long]

sealed trait ShortMultiplication extends NewType[Short]

trait Multiplications {
  def multiplication(n: BigInteger): BigIntegerMultiplication = new BigIntegerMultiplication {
    val value = n
  }

  def multiplication(n: BigInt): BigIntMultiplication = new BigIntMultiplication {
    val value = n
  }

  def multiplication(n: Byte): ByteMultiplication = new ByteMultiplication {
    val value = n
  }

  def multiplication(n: Char): CharMultiplication = new CharMultiplication {
    val value = n
  }
  
  def multiplication(n: Int): IntMultiplication = new IntMultiplication {
    val value = n
  }

  def multiplication(n: Long): LongMultiplication = new LongMultiplication {
    val value = n
  }

  def multiplication(n: Short): ShortMultiplication = new ShortMultiplication {
    val value = n
  }
}