Proper

libretto.lambda.Projection.Proper
sealed trait Proper[|*|[_, _], P, Q] extends Projection[|*|, P, Q]

Attributes

Graph
Supertypes
trait Projection[|*|, P, Q]
class Object
trait Matchable
class Any
Known subtypes
class DiscardFst[|*|, A, B, B0]
class DiscardSnd[|*|, A, B, A0]
trait Par[|*|, P1, P2, Q1, Q2]
class Both[|*|, P1, P2, Q1, Q2]
class Fst[|*|, P, Q, B]
class Snd[|*|, A, P, Q]
Show all

Members list

Type members

Classlikes

class FromPair[P1, P2](using ev: P =:= (P1 |*| P2))

Attributes

Supertypes
class Object
trait Matchable
class Any

Value members

Abstract methods

protected def discardFst[Q1, Q2](using ev: Q =:= (Q1 |*| Q2)): Proper[|*|, P, Q2]
protected def discardSnd[Q1, Q2](using ev: Q =:= (Q1 |*| Q2)): Proper[|*|, P, Q1]
protected def projectFst[Q1, Q2, R1](using ev: Q =:= (Q1 |*| Q2))(p1: Proper[|*|, Q1, R1]): Proper[|*|, P, R1 |*| Q2]
protected def projectSnd[Q1, Q2, R2](using ev: Q =:= (Q1 |*| Q2))(p2: Proper[|*|, Q2, R2]): Proper[|*|, P, Q1 |*| R2]
def startsFromPair: Exists[[P1] =>> Exists[[P2] =>> P =:= (P1 |*| P2)]]

Concrete methods

override def >[R](that: Projection[|*|, Q, R]): Proper[|*|, P, R]

Attributes

Definition Classes
override def at[F[_]](f: Focus[|*|, F]): Proper[|*|, F[P], F[Q]]

Attributes

Definition Classes
override def from[O](using ev: O =:= P): Proper[|*|, O, Q]

Attributes

Definition Classes
def fromPair[P1, P2](using P =:= (P1 |*| P2)): FromPair[P1, P2]
override def inFst[X2]: Proper[|*|, P |*| X2, Q |*| X2]

Attributes

Definition Classes
override def inSnd[X1]: Proper[|*|, X1 |*| P, X1 |*| Q]

Attributes

Definition Classes
def switchFromPair[P1, P2, R](using ev: P =:= (P1 |*| P2))(caseDiscardFst: Projection[|*|, P2, Q] => R, caseDiscardSnd: Projection[|*|, P1, Q] => R, casePar: [Q1, Q2] => (Q =:= (Q1 |*| Q2)) ?=> Par[|*|, P1, P2, Q1, Q2] => R)(using BiInjective[|*|]): R
override def to[R](using ev: Q =:= R): Proper[|*|, P, R]

Attributes

Definition Classes