object Liskov extends LiskovInstances
- Source
- Liskov.scala
- Alphabetic
- By Inheritance
- Liskov
- LiskovInstances
- AnyRef
- Any
- Hide All
- Show All
- Public
- Protected
Type Members
Value Members
- final def !=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def ##: Int
- Definition Classes
- AnyRef → Any
- final def ==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def asInstanceOf[T0]: T0
- Definition Classes
- Any
- def clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.CloneNotSupportedException]) @native()
- def co[T[+_], A, A2](a: <~<[A, A2]): <~<[T[A], T[A2]]
We can lift subtyping into any covariant type constructor
- def co2[T[+_, _], Z, A, B](a: <~<[A, Z]): <~<[T[A, B], T[Z, B]]
- def co2_2[T[_, +_], Z, A, B](a: <~<[B, Z]): <~<[T[A, B], T[A, Z]]
- def co3[T[+_, _, _], Z, A, B, C](a: <~<[A, Z]): <~<[T[A, B, C], T[Z, B, C]]
- def co4[T[+_, _, _, _], Z, A, B, C, D](a: <~<[A, Z]): <~<[T[A, B, C, D], T[Z, B, C, D]]
- def contra[T[-_], A, A2](a: <~<[A, A2]): <~<[T[A2], T[A]]
We can lift subtyping into any contravariant type constructor
- def contra1_2[T[-_, _], Z, A, B](a: <~<[A, Z]): <~<[T[Z, B], T[A, B]]
- def contra1_3[T[-_, _, _], Z, A, B, C](a: <~<[A, Z]): <~<[T[Z, B, C], T[A, B, C]]
- def contra1_4[T[-_, _, _, _], Z, A, B, C, D](a: <~<[A, Z]): <~<[T[Z, B, C, D], T[A, B, C, D]]
- def contra2_2[T[_, -_], Z, A, B](a: <~<[B, Z]): <~<[T[A, Z], T[A, B]]
- def contra2_3[T[_, -_, _], Z, A, B, C](a: <~<[B, Z]): <~<[T[A, Z, C], T[A, B, C]]
- def contra2_4[T[_, -_, _, _], Z, A, B, C, D](a: <~<[B, Z]): <~<[T[A, Z, C, D], T[A, B, C, D]]
- def contra3_3[T[_, _, -_], Z, A, B, C](a: <~<[C, Z]): <~<[T[A, B, Z], T[A, B, C]]
- def contra3_4[T[_, _, -_, _], Z, A, B, C, D](a: <~<[C, Z]): <~<[T[A, B, Z, D], T[A, B, C, D]]
- def contra4_4[T[_, _, _, -_], Z, A, B, C, D](a: <~<[D, Z]): <~<[T[A, B, C, Z], T[A, B, C, D]]
- final def eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- def equals(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef → Any
- def finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.Throwable])
- def force[A, B]: <~<[A, B]
Unsafely force a claim that A is a subtype of B.
- final def getClass(): Class[_ <: AnyRef]
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
- def hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
- final def isInstanceOf[T0]: Boolean
- Definition Classes
- Any
- implicit def isa[A, B >: A]: <~<[A, B]
Lift Scala's subtyping relationship
Lift Scala's subtyping relationship
- Definition Classes
- LiskovInstances
- def lift2[T[+_, +_], A, A2, B, B2](a: <~<[A, A2], b: <~<[B, B2]): <~<[T[A, B], T[A2, B2]]
lift2(a,b) = co1_2(a) compose co2_2(b)
- def lift3[T[+_, +_, +_], A, A2, B, B2, C, C2](a: <~<[A, A2], b: <~<[B, B2], c: <~<[C, C2]): <~<[T[A, B, C], T[A2, B2, C2]]
lift3(a,b,c) = co1_3(a) compose co2_3(b) compose co3_3(c)
- def lift4[T[+_, +_, +_, +_], A, A2, B, B2, C, C2, D, D2](a: <~<[A, A2], b: <~<[B, B2], c: <~<[C, C2], d: <~<[D, D2]): <~<[T[A, B, C, D], T[A2, B2, C2, D2]]
lift4(a,b,c,d) = co1_3(a) compose co2_3(b) compose co3_3(c) compose co4_4(d)
- def liftF1[F[-_, +_], A, A2, R, R2](a: <~<[A, A2], r: <~<[R, R2]): <~<[F[A2, R], F[A, R2]]
Lift subtyping into a unary function-like type
Lift subtyping into a unary function-like type
liftF1(a,r) = contra1_2(a) compose co2_2(b)
- def liftF2[F[-_, -_, +_], A, A2, B, B2, R, R2](a: <~<[A, A2], b: <~<[B, B2], r: <~<[R, R2]): <~<[F[A2, B2, R], F[A, B, R2]]
Lift subtyping into a binary function-like type
Lift subtyping into a binary function-like type
liftF2(a,b,r) = contra1_3(a) compose contra2_3(b) compose co3_3(c)
- def liftF3[F[-_, -_, -_, +_], A, A2, B, B2, C, C2, R, R2](a: <~<[A, A2], b: <~<[B, B2], c: <~<[C, C2], r: <~<[R, R2]): <~<[F[A2, B2, C2, R], F[A, B, C, R2]]
Lift subtyping into a ternary function-like type
Lift subtyping into a ternary function-like type
liftF3(a,b,c,r) = contra1_4(a) compose contra2_4(b) compose contra3_4(c) compose co3_4(d)
- def liftF4[F[-_, -_, -_, -_, +_], A, A2, B, B2, C, C2, D, D2, R, R2](a: <~<[A, A2], b: <~<[B, B2], c: <~<[C, C2], d: <~<[D, D2], r: <~<[R, R2]): <~<[F[A2, B2, C2, D2, R], F[A, B, C, D, R2]]
Lift subtyping into a 4-ary function-like type
- implicit val liskov: Category[<~<]
Subtyping forms a category
Subtyping forms a category
- Definition Classes
- LiskovInstances
- final def ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- final def notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
- final def notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
- implicit def refl[A]: <~<[A, A]
Subtyping is reflexive
- final def synchronized[T0](arg0: => T0): T0
- Definition Classes
- AnyRef
- def toString(): String
- Definition Classes
- AnyRef → Any
- def trans[A, B, C](f: <~<[B, C], g: <~<[A, B]): <~<[A, C]
Subtyping is transitive
- def unco[F[_], Z, A](a: <~<[F[A], F[Z]])(implicit arg0: Injective[F]): <~<[A, Z]
- def unco2_1[F[+_, _], Z, A, B](a: <~<[F[A, B], F[Z, B]])(implicit arg0: Injective2[F]): <~<[A, Z]
- def unco2_2[F[_, +_], Z, A, B](a: <~<[F[A, B], F[A, Z]])(implicit arg0: Injective2[F]): <~<[B, Z]
- def uncontra[F[-_], Z, A](a: <~<[F[A], F[Z]])(implicit arg0: Injective[F]): <~<[Z, A]
- def uncontra2_1[F[-_, _], Z, A, B](a: <~<[F[A, B], F[Z, B]])(implicit arg0: Injective2[F]): <~<[Z, A]
- def uncontra2_2[F[_, -_], Z, A, B](a: <~<[F[A, B], F[A, Z]])(implicit arg0: Injective2[F]): <~<[Z, B]
- final def wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException]) @native()
- implicit def witness[A, B](lt: <~<[A, B]): (A) => B
We can witness equality by using it to convert between types