We can lift subtyping into any covariant type constructor
We can lift subtyping into any covariant type constructor
We can lift subtyping into any contravariant type constructor
We can lift subtyping into any contravariant type constructor
Unsafely force a claim that A is a subtype of B
Unsafely force a claim that A is a subtype of B
Lift Scala's subtyping relationship
Lift Scala's subtyping relationship
lift2(a,b) = co1_2(a) compose co2_2(b)
lift2(a,b) = co1_2(a) compose co2_2(b)
lift3(a,b,c) = co1_3(a) compose co2_3(b) compose co3_3(c)
lift3(a,b,c) = co1_3(a) compose co2_3(b) compose co3_3(c)
lift4(a,b,c,d) = co1_3(a) compose co2_3(b) compose co3_3(c) compose co4_4(d)
lift4(a,b,c,d) = co1_3(a) compose co2_3(b) compose co3_3(c) compose co4_4(d)
Lift subtyping into a Function1-like type liftF1(a,r) = contra1_2(a) compose co2_2(b)
Lift subtyping into a Function1-like type liftF1(a,r) = contra1_2(a) compose co2_2(b)
Lift subtyping into a function liftF2(a,b,r) = contra1_3(a) compose contra2_3(b) compose co3_3(c)
Lift subtyping into a function liftF2(a,b,r) = contra1_3(a) compose contra2_3(b) compose co3_3(c)
Lift subtyping into a function liftF3(a,b,c,r) = contra1_4(a) compose contra2_4(b) compose contra3_4(c) compose co3_4(d)
Lift subtyping into a function liftF3(a,b,c,r) = contra1_4(a) compose contra2_4(b) compose contra3_4(c) compose co3_4(d)
Lift subtyping into a function
Lift subtyping into a function
Subtyping forms a category
Subtyping forms a category
Subtyping is reflexive
Subtyping is reflexive
Subtyping is transitive
Subtyping is transitive
We can witness equality by using it to convert between types
We can witness equality by using it to convert between types
(Since version 7.1.0) inv is unsound on <~<; use Leibniz.=== or Liskov.co instead