final class ComposedBlueprint[F[_], MName <: String, Owns <: Tuple, Needs <: Tuple, Txs <: Tuple](val owns: Owns, val reducer0: RoutedStateReducer0[F, Owns, Needs], val txs: TxRegistry[Txs], val provider: TablesProvider[F, Needs], val routeHeads: List[String])(using val uniqueNames: UniqueNames[Owns], val moduleValue: ValueOf[MName]) extends Blueprint[F, MName, Owns, Needs, Txs, RoutedStateReducer0[F, Owns, Needs]]
Composed blueprint (path-independent).
A composed blueprint is the result of combining two or more module blueprints. It uses RoutedStateReducer0, which REQUIRES all transactions to implement ModuleRoutedTx for routing purposes.
The type system enforces this requirement at compile time: attempting to apply a non-routed transaction to a ComposedBlueprint's reducer will be a compile error.
Phase 5.5 update: Now explicitly models Owns and Needs like ModuleBlueprint.
Type parameters
F
the effect type
MName
the module name (literal String type)
Needs
the needed schema tuple (tuple of Entry types)
Owns
the owned schema tuple (tuple of Entry types)
Txs
the transaction types tuple
Value parameters
owns
the Entry instances for owned tables (runtime values)
Phase 5.5: We only check uniqueness of owned tables. External tables (Needs) are provided by TablesProvider and their uniqueness is the responsibility of the provider module.