HandlersModule

libretto.lambda.EnumModule.HandlersModule
opaque trait HandlersModule

Attributes

Graph
Supertypes
class Object
trait Matchable
class Any

Members list

Type members

Types

type Builder[Cases, RemainingCases, R]
opaque type InitialBuilder[Cases]

Compared to Builder, defers specifying the result type.

Compared to Builder, defers specifying the result type.

Attributes

Value members

Abstract methods

def apply[Cases, R]: Builder[Cases, Cases, R]
def cons[HLbl, H, T, R](h: H -> R, t: Handlers[T, R]): Handlers[(HLbl :: H) || T, R]
def single[Lbl, A, R](h: A -> R): Handlers[Lbl :: A, R]

Concrete methods

def apply[Cases]: InitialBuilder[Cases]

Extensions

Extensions

extension [Cases, HLbl, H, T, R](b: Builder[Cases, (HLbl :: H) || T, R])
def caseOf[Lbl](using StaticValue[Lbl], Lbl =:= HLbl)(h: H -> R): Builder[Cases, T, R]
extension [Cases, Lbl, A, R](b: Builder[Cases, Lbl :: A, R])
def caseOf[L](using StaticValue[L], L =:= Lbl, DummyImplicit)(h: A -> R): Handlers[Cases, R]
extension [HLbl, H, T](b: InitialBuilder[(HLbl :: H) || T])
def caseOf[Lbl](using StaticValue[Lbl], Lbl =:= HLbl): [R] => (H -> R) => Builder[(HLbl :: H) || T, T, R]
extension [Lbl, A](b: InitialBuilder[Lbl :: A])
def caseOf[L](using StaticValue[L], L =:= Lbl, DummyImplicit): [R] => (A -> R) => Handlers[Lbl :: A, R]