DistLR

libretto.lambda.DistributionNAry.DistLR
See theDistLR companion object
sealed trait DistLR[**[_, _], ||[_, _], ::[_, _], A, Cases]

Attributes

Companion
object
Graph
Supertypes
class Object
trait Matchable
class Any
Known subtypes
class Single[**, ||, ::, A, Lbl, B]
class Snoc[**, ||, ::, A, Init, Lbl, Z, AInit]
Self type
DistLR[**, ||, ::, A, Cases]

Members list

Type members

Types

type Out

Value members

Abstract methods

def distributeOver[N, I](m: Member[||, ::, N, I, Cases])(using BiInjective[||], BiInjective[::]): Member[||, ::, N, A ** I, Out]
def dropNames[[_, _], Nil]: Exists[[X] =>> Exists[[Y] =>> (DropNames[||, ::, , Nil, Cases, X], Unnamed[**, , Nil, A, X] { type Out = Y; }, DropNames[||, ::, , Nil, Out, Y])]]
def separately[A1, A2](using A =:= (A1 ** A2)): Exists[[A2Cases] =>> Exists[[A12Cases] =>> (DistLR[**, ||, ::, A2, Cases] { type Out = A2Cases; }, DistLR[**, ||, ::, A1, A2Cases] { type Out = A12Cases; }, Named[||, ::, [x, y] =>> Exists[[b] =>> (x =:= (A1 ** (A2 ** b)), (A1 ** A2 ** b) =:= y)], A12Cases, Out])]]

Concrete methods

def extend[Lbl <: String, Z](lbl: SingletonType[Lbl]): DistLR[**, ||, ::, A, Cases || (Lbl :: Z)] { type Out = Out || (Lbl :: (A ** Z)); }
def snoc[Z](lbl: String): DistLR[**, ||, ::, A, Cases || (lbl.type :: Z)] { type Out = Out || (lbl.type :: (A ** Z)); }