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 single[Lbl <: String, A, R](label: Lbl, h: A -> R): Handlers[Lbl :: A, R]
def snoc[Init, Lbl <: String, Z, R](init: Handlers[Init, R], label: Lbl, last: Z -> R): Handlers[Init || (Lbl :: Z), R]

Concrete methods

def apply[Cases]: InitialBuilder[Cases]

Extensions

Extensions

extension [Cases, Init, ZLbl <: String, Z, R](b: Builder[Cases, Init || (ZLbl :: Z), R])
def caseOf[Lbl](using StaticValue[Lbl], Lbl =:= ZLbl)(h: Z -> R): Builder[Cases, Init, R]
extension [Cases, Lbl <: String, A, R](b: Builder[Cases, Lbl :: A, R])
def caseOf[L](using StaticValue[L], L =:= Lbl, DummyImplicit)(h: A -> R): Handlers[Cases, R]
extension [Init, ZLbl <: String, Z](b: InitialBuilder[Init || (ZLbl :: Z)])
def caseOf[Lbl](using StaticValue[Lbl], Lbl =:= ZLbl): [R] => (Z -> R) => Builder[Init || (ZLbl :: Z), Init, R]
extension [Lbl <: String, A](b: InitialBuilder[Lbl :: A])
def caseOf[L](using StaticValue[L], L =:= Lbl, DummyImplicit): [R] => (A -> R) => Handlers[Lbl :: A, R]