1 import Base 2 import ./world.bend as W 3 import ./local.bend as Local 4 5 # Closed runner identity with an actual affine per-instance capture owner. 6 def register(~S: Data,~C: Type,~R: Type,~E: Data,~L: Type,~Args: Type,~Error: Data,~Out: Type,~runner: W.World -> L -> Args -> Local.Outcome,L,Error,Out>,world: W.World,name: String,access: List<&2,String>,local: L) -> Local.Registered: 7 Local.register(~S,~C,~R,~E,~L,~Args,~Error,~Out,~runner,world,name,access,local) 8 9 def run(~S: Data,~C: Type,~R: Type,~E: Data,~L: Type,~Args: Type,~Error: Data,~Out: Type,~runner: W.World -> L -> Args -> Local.Outcome,L,Error,Out>,instance: Local.Instance,world: W.World,args: Args) -> Local.Run: 10 Local.run(~S,~C,~R,~E,~L,~Args,~Error,~Out,~runner,instance,world,args) 11 12 def skip(~S: Data,~C: Type,~R: Type,~E: Data,~L: Type,~Args: Type,~Error: Data,~Out: Type,~runner: W.World -> L -> Args -> Local.Outcome,L,Error,Out>,instance: Local.Instance) -> Local.Instance: 13 Local.skip(~S,~C,~R,~E,~L,~Args,~Error,~Out,~runner,instance) 14 15 def observe(~S: Data,~C: Type,~R: Type,~E: Data,~L: Type,~Args: Type,~Error: Data,~Out: Type,~runner: W.World -> L -> Args -> Local.Outcome,L,Error,Out>,~V: Data,~project: L -> L & V,instance: Local.Instance) -> Local.Instance & V: 16 Local.observe(~S,~C,~R,~E,~L,~Args,~Error,~Out,~runner,~V,~project,instance) 17 18 def identity(~S: Data,~C: Type,~R: Type,~E: Data,~L: Type,~Args: Type,~Error: Data,~Out: Type,~runner: W.World -> L -> Args -> Local.Outcome,L,Error,Out>,instance: Local.Instance) -> Local.Instance & U32: 19 Local.identity(~S,~C,~R,~E,~L,~Args,~Error,~Out,~runner,instance) 20 21 def returned(~L: Type,owner: L) -> L: 22 owner 23 24 # Unregister invalidates the registration and returns the capture unchanged. 25 def unregister(~S: Data,~C: Type,~R: Type,~E: Data,~L: Type,~Args: Type,~Error: Data,~Out: Type,~runner: W.World -> L -> Args -> Local.Outcome,L,Error,Out>,instance: Local.Instance,world: W.World) -> Local.Disposal: 26 Local.dispose(~S,~C,~R,~E,~L,~Args,~Error,~Out,~runner,~L,~returned(~L),instance,world)