@@ -59,17 +59,17 @@ case object RecY extends RecY[Unit]
59
59
sealed abstract class RecZ [A ]() extends RecVar [A ](" Z" )
60
60
case object RecZ extends RecZ [Unit ]
61
61
62
- case class Def [V <: ProcVar , A , P1 <: Process , P2 <: Process ](name : V [A ], pdef : A => P1 , in : () => P2 ) extends Process
63
- case class Call [V <: ProcVar , A ](procvar : V [A ], arg : A ) extends Process
62
+ case class Def [V [ X ] <: ProcVar [ X ] , A , P1 <: Process , P2 <: Process ](name : V [A ], pdef : A => P1 , in : () => P2 ) extends Process
63
+ case class Call [V [ X ] <: ProcVar [ X ] , A ](procvar : V [A ], arg : A ) extends Process
64
64
65
65
case class >>: [P1 <: Process , P2 <: Process ](p1 : () => P1 , p2 : () => P2 ) extends Process
66
66
67
67
package object dsl {
68
68
/** Recursion: `P` loops on `V`, that represent a bound recursion variable. */
69
- type Rec [V <: RecVar , P <: Process ] = Def [V , Unit , P , P ]
69
+ type Rec [V [ X ] <: RecVar [ X ] , P <: Process ] = Def [V , Unit , P , P ]
70
70
71
71
/** Loop on a recursion variable `V`, expected to be bound by [[Rec ]].*/
72
- type Loop [V <: RecVar ] = Call [V , Unit ]
72
+ type Loop [V [ X ] <: RecVar [ X ] ] = Call [V , Unit ]
73
73
74
74
/** Execute `P1` and `P2` in parallel. */
75
75
type Par [P1 <: Process , P2 <: Process ] = Fork [P1 ] >>: P2
@@ -270,13 +270,13 @@ package object dsl {
270
270
Yield [A ](v)(Some (implicitly[YieldCtx [A ]]))
271
271
}
272
272
273
- def pdef [V <: ProcVar , A , P1 <: Process , P2 <: Process ](name : V [A ])(pdef : A => P1 )(in : => P2 ) = Def [V , A , P1 , P2 ](name, pdef, () => in)
273
+ def pdef [V [ X ] <: ProcVar [ X ] , A , P1 <: Process , P2 <: Process ](name : V [A ])(pdef : A => P1 )(in : => P2 ) = Def [V , A , P1 , P2 ](name, pdef, () => in)
274
274
275
- def pcall [V <: ProcVar , A ](name : V [A ], arg : A ) = Call [V ,A ](name, arg)
275
+ def pcall [V [ X ] <: ProcVar [ X ] , A ](name : V [A ], arg : A ) = Call [V ,A ](name, arg)
276
276
277
- def rec [V <: RecVar , P <: Process ](v : V [Unit ])(p : => P ): Rec [V , P ] = Def [V , Unit , P , P ](v, (x) => p, () => p)
277
+ def rec [V [ X ] <: RecVar [ X ] , P <: Process ](v : V [Unit ])(p : => P ): Rec [V , P ] = Def [V , Unit , P , P ](v, (x) => p, () => p)
278
278
279
- def loop [V <: RecVar ](v : V [Unit ]): Loop [V ] = Call [V , Unit ](v, ())
279
+ def loop [V [ X ] <: RecVar [ X ] ](v : V [Unit ]): Loop [V ] = Call [V , Unit ](v, ())
280
280
281
281
def eval (p : Process ): Try [Unit ] = Try (eval(Map (), Nil , p))
282
282
0 commit comments