All Downloads are FREE. Search and download functionalities are using the official Maven repository.

.shapeless-scalacheck_2.9.2.0.1.source-code.typeclass.scala Maven / Gradle / Ivy

The newest version!
package shapeless.contrib.scalacheck

import shapeless._

import scalaz._
import scalaz.syntax.apply._
import scalaz.scalacheck.ScalaCheckBinding._

import org.scalacheck.{Gen, Arbitrary}

trait TypeClasses {

  implicit def ArbitraryI: TypeClass[Arbitrary] = new TypeClass[Arbitrary] {

    def emptyProduct = Arbitrary(Gen.value(HNil))

    def product[F, T <: HList](f: Arbitrary[F], t: Arbitrary[T]) =
      (f |@| t) { _ :: _ }

    def derive[A, B](b: Arbitrary[B], ab: Iso[A, B]) =
      b.map(ab.from)

  }

  implicit def deriveArbitrary[F, G <: HList](implicit iso: Iso[F, G], hlistInst: TypeClass.HListInstance[Arbitrary, G]): Arbitrary[F] =
    TypeClass.deriveFromIso[Arbitrary, F, G]

}

object typeClasses extends TypeClasses

// vim: expandtab:ts=2:sw=2




© 2015 - 2025 Weber Informatics LLC | Privacy Policy