- , . , HKT, , .
E[Dependency] E[_], , E . , Dependency . E E[Dependency] . E , E[Dependency] , . ,
trait Actor[E[D] <: Event[D]] { def execute(d: E) {} }
trait Actor[E[D] <: Event[D]] { def execute(d: E[D]) {} }
.
:
trait Actor[E[D] <: Event[D]] { def execute[B](d: E[B]) {} }
E[B] - .
:
, :
trait Event[P] {
val payload: P
}
case class FooEvent(payload: Int) extends Event[Int]
trait BaseActor {
type E = Event[P]
type P
def execute(dep: P)
def runEvent(event: E)
}
trait IntActor extends BaseActor {
type P = Int
}
class FooActor extends IntActor {
def execute(dependency: P) = {}
def runEvent(event: E) = {}
}
val c = new FooActor()
c.runEvent(FooEvent(5))
c.execute(5)
, type P, Dependency type E = Event[P], Event[Dependency], , P E, . , , . , IntActor . ,