package scalaz
package std

trait TypeConstraintInstances {
  val <:< = new Category[<:<] {
    def id[A] = conforms[A]
    def compose[A, B, C](f: B <:< C, g: A <:< B) = f.asInstanceOf[A <:< C]
  }

  val =:= = new Category[=:=] {
    def id[A] = implicitly
    def compose[A, B, C](f: B =:= C, g: A =:= B) = f.asInstanceOf[A =:= C]
  }
}

object typeConstraint extends TypeConstraintInstances