Chain trait delegations so Top delegates to Middle which delegates to Final.
← Sealed Types and Traits · Ref: Q1130
Chain delegators -- each level forwards to the next:
TopProducer with trait of Producer by delegate delegate as Producer? MiddleProducer with trait of Producer by delegate delegate as Producer? FinalProducer with trait of Producer override produce() as pure <- result as String: "final"
Calling top.produce() flows: Top -> Middle -> Final.
See Q1129 for basic delegation. See Q1131 for diamond resolution.
Example
defines module qa.sealedtraits.traitdelegationchain defines trait Producer produce() as pure <- result as String: "default" defines class FinalProducer with trait of Producer override produce() as pure <- result as String: "final" default operator ? MiddleProducer with trait of Producer by delegate delegate as Producer? default private MiddleProducer() MiddleProducer() -> prod as Producer require prod? delegate := prod default operator ? TopProducer with trait of Producer by delegate delegate as Producer? default private TopProducer() TopProducer() -> prod as Producer require prod? delegate := prod default operator ? defines program TraitDelegationChainDemo() stdout <- Stdout() last <- FinalProducer() middle <- MiddleProducer(last) top <- TopProducer(middle) //Call flows: Top -> Middle -> Final result <- top.produce() stdout.println(`Result: ${result}`)
Common mistakes
E05030 — Use delegation (by keyword) instead of inheritance for chain-of-responsibility patterns.
Incorrect:
TopProducer extends MiddleProducer
Correct:
TopProducer with trait of Producer by delegate delegate as Producer?
Other ways to ask this
- I need a multi-level delegation chain where each layer forwards to the next
- In Java I'd chain decorator objects. Write the EK9 chained trait delegation
- Given three classes implementing a trait, wire them so calls flow Top -> Middle -> Final
- Build a delegation pipeline across multiple levels using 'by' keyword
Coming from another language?
Java: Decorator pattern with chained wrappers. Python: decorator chain. Go: nested embedding. EK9: chained 'by delegate' fields.
Keywords: chain, trait, delegation, multi-level, forward, pipeline