package scalaprops import scalaz._ object GenTags { private[this] type CharInstance[A] = Monoid[A] with Enum[A] with Show[A] private[this] type StringInstance[A] = Monoid[A] with Show[A] with Order[A] with IsEmpty[({type l[_] = A})#l] sealed trait Num val Num = Tag.of[Num] implicit val numCharInstance: CharInstance[Char @@ Num] = Num.subst[CharInstance, Char](scalaz.std.anyVal.char) implicit val numStringInstance: StringInstance[String @@ Num] = Num.subst[StringInstance, String](scalaz.std.string.stringInstance) sealed trait AlphaUpper val AlphaUpper = Tag.of[AlphaUpper] implicit val alphaUpperCharInstance: CharInstance[Char @@ AlphaUpper] = AlphaUpper.subst[CharInstance, Char](scalaz.std.anyVal.char) implicit val alphaUpperStringInstance: StringInstance[String @@ AlphaUpper] = AlphaUpper.subst[StringInstance, String](scalaz.std.string.stringInstance) sealed trait AlphaLower val AlphaLower = Tag.of[AlphaLower] implicit val alphaLowerCharInstance: CharInstance[Char @@ AlphaLower] = AlphaLower.subst[CharInstance, Char](scalaz.std.anyVal.char) implicit val alphaLowerStringInstance: StringInstance[String @@ AlphaLower] = AlphaLower.subst[StringInstance, String](scalaz.std.string.stringInstance) sealed trait Alpha val Alpha = Tag.of[Alpha] implicit val alphaCharInstance: CharInstance[Char @@ Alpha] = Alpha.subst[CharInstance, Char](scalaz.std.anyVal.char) implicit val alphaStringInstance: StringInstance[String @@ Alpha] = Alpha.subst[StringInstance, String](scalaz.std.string.stringInstance) sealed trait AlphaNum val AlphaNum = Tag.of[AlphaNum] implicit val alphaNumCharInstance: CharInstance[Char @@ AlphaNum] = AlphaNum.subst[CharInstance, Char](scalaz.std.anyVal.char) implicit val alphaNumStringInstance: StringInstance[String @@ AlphaNum] = AlphaNum.subst[StringInstance, String](scalaz.std.string.stringInstance) sealed trait Ascii val Ascii = Tag.of[Ascii] implicit val asciiCharInstance: CharInstance[Char @@ Ascii] = Ascii.subst[CharInstance, Char](scalaz.std.anyVal.char) implicit val asciiStringInstance: StringInstance[String @@ Ascii] = Ascii.subst[StringInstance, String](scalaz.std.string.stringInstance) }