c

scalaz

# Leibniz 

### Companion object Leibniz

#### sealed abstract class Leibniz[-L, +H >: L, A >: L <: H, B >: L <: H] extends AnyRef

Leibnizian equality: a better `=:=`

This technique was first used in Typing Dynamic Typing (Baars and Swierstra, ICFP 2002).

It is generalized here to handle subtyping so that it can be used with constrained type constructors.

`Leibniz[L,H,A,B]` says that `A` = `B`, and that both of its types are between `L` and `H`. Subtyping lets you loosen the bounds on `L` and `H`.

If you just need a witness that `A` = `B`, then you can use `A===B` which is a supertype of any `Leibniz[L,H,A,B]`

The more refined types are useful if you need to be able to substitute into restricted contexts.

Source
Leibniz.scala
Linear Supertypes
Ordering
1. Alphabetic
2. By Inheritance
Inherited
1. Leibniz
2. AnyRef
3. Any
1. Hide All
2. Show All
Visibility
1. Public
2. All

### Abstract Value Members

1. abstract def subst[F[_ >: L <: H]](p: F[A]): F[B]

### Concrete Value Members

1. final def !=(arg0: Any)
Definition Classes
AnyRef → Any
2. final def ##(): Int
Definition Classes
AnyRef → Any
3. final def ==(arg0: Any)
Definition Classes
AnyRef → Any
4. def andThen[L2 <: L, H2 >: H, C >: L2 <: H2](that: Leibniz[L2, H2, B, C]): Leibniz[L2, H2, A, C]
5. def apply(a: A): B
6. final def asInstanceOf[T0]: T0
Definition Classes
Any
7. def clone()
Attributes
protected[lang]
Definition Classes
AnyRef
Annotations
@throws( ... ) @native()
8. def compose[L2 <: L, H2 >: H, C >: L2 <: H2](that: Leibniz[L2, H2, C, A]): Leibniz[L2, H2, C, B]
9. final def eq(arg0: AnyRef)
Definition Classes
AnyRef
10. def equals(arg0: Any)
Definition Classes
AnyRef → Any
11. def finalize(): Unit
Attributes
protected[lang]
Definition Classes
AnyRef
Annotations
@throws( classOf[java.lang.Throwable] )
12. def flip: Leibniz[L, H, B, A]
13. final def getClass(): Class[_]
Definition Classes
AnyRef → Any
Annotations
@native()
14. def hashCode(): Int
Definition Classes
AnyRef → Any
Annotations
@native()
15. final def isInstanceOf[T0]
Definition Classes
Any
16. final def ne(arg0: AnyRef)
Definition Classes
AnyRef
17. final def notify(): Unit
Definition Classes
AnyRef
Annotations
@native()
18. final def notifyAll(): Unit
Definition Classes
AnyRef
Annotations
@native()
19. def onContra[FA](fa: FA)(implicit U: AuxA[Contravariant, FA, A]): (U)#M[B]
20. def onCov[FA](fa: FA)(implicit U: AuxA[Functor, FA, A]): (U)#M[B]
21. def onF[X](fa: (X) ⇒ A): (X) ⇒ B
22. final def synchronized[T0](arg0: ⇒ T0): T0
Definition Classes
AnyRef
23. def toString()
Definition Classes
AnyRef → Any
24. final def wait(): Unit
Definition Classes
AnyRef
Annotations
@throws( ... )
25. final def wait(arg0: Long, arg1: Int): Unit
Definition Classes
AnyRef
Annotations
@throws( ... )
26. final def wait(arg0: Long): Unit
Definition Classes
AnyRef
Annotations
@throws( ... ) @native()