1 import Base 2 import ./change_tick.bend as Tick 3 import ./world.bend as W 4 import ./system.bend as Sys 5 import ./transaction.bend as Tx 6 import ./commands.bend as Cmd 7 import ./capabilities.bend as Cap 8 import ./reader_parameter.bend as RP 9 import ./event_notice_runtime.bend as Mixed 10 import ./event_family_routing.bend as Route 11 import ./relation_commands.bend as Notice 12 import ./internal/relation_failures/domains.bend as D 13 14 # A registered ordinary callback receives one detached product view while the 15 # shared runtime context remains outside the callback transaction. 16 type Invocation is Type: 17 Invocation{meta:Meta,reader:Reader,parameter:Parameter,declaration:Declaration,args:Args,queryCursor:Maybe<&2,Tick.Tick>} 18 19 type Completion is Type: 20 CallbackCompleted{output:Output} 21 CallbackFailed{error:Failure,output:Output} 22 CallbackInvalidReader{} 23 24 type Envelope is Type: 25 Envelope{meta:Meta,reader:Reader,parameter:Parameter,declaration:Declaration,completion:Completion} 26 27 type Provider is Type: 28 Provider{registry:Registry,reader:Reader,parameter:Parameter,declaration:Declaration} 29 30 type Definition is Type: 31 DefinitionRegistered{context:Context,provider:Provider} 32 DefinitionRejected{context:Context,parameter:Parameter,declaration:Declaration} 33 DefinitionDisposalRejected{context:Context,provider:Provider,parameter:Parameter} 34 35 type RunResult is Type: 36 RunCompleted{context:Context,provider:Provider,output:Output} 37 RunFailed{context:Context,provider:Provider,error:Failure,output:Output} 38 RunInvalidReader{context:Context,provider:Provider} 39 RunRegistrationRejected{context:Context,provider:Provider,args:Args} 40 RunSkipped{context:Context,provider:Provider} 41 42 def outer_succeeded(~S:Data,~C:Type,~R:Type,~E:Data,~Context:Type,~Meta:Type,~Reader:Type,~View:Data,~Delta:Type,~validateFn:Context -> Reader -> Context & (Reader & Bool),~prepareFn:Context -> @+cursor:Maybe<&2,Tick.Tick> -> Reader -> Context & (Reader & (View & Delta)),~commitFn:Context -> Reader -> Delta -> @+cursor:Tick.Tick -> Context & Reader,~releaseFn:Context -> Reader -> Context,~Declaration:Type,~Failure:Data,~Output:Type, 43 observed:W.World & Envelope,Declaration,Failure,Output>) -> Sys.Outcome,Empty,Envelope,Declaration,Failure,Output>>: 44 match observed: 45 case (world,envelope):Sys.Succeeded{world,envelope} 46 47 def invalid_parts(~S:Data,~C:Type,~R:Type,~E:Data,~Context:Type,~Meta:Type,~Reader:Type,~View:Data,~Delta:Type,~validateFn:Context -> Reader -> Context & (Reader & Bool),~prepareFn:Context -> @+cursor:Maybe<&2,Tick.Tick> -> Reader -> Context & (Reader & (View & Delta)),~commitFn:Context -> Reader -> Delta -> @+cursor:Tick.Tick -> Context & Reader,~releaseFn:Context -> Reader -> Context,~Declaration:Type,~Failure:Data,~Output:Type, 48 declaration:Declaration,parameter:RP.Param,reader:Reader,parts:W.World & Meta) -> Sys.Outcome,Empty,Envelope,Declaration,Failure,Output>>: 49 match parts: 50 case (world,meta):Sys.Succeeded{world,Envelope{meta,reader,parameter,declaration,CallbackInvalidReader{}}} 51 52 def invalid_reader(~S:Data,~C:Type,~R:Type,~E:Data,~Context:Type,~Meta:Type,~Reader:Type,~View:Data,~Delta:Type,~validateFn:Context -> Reader -> Context & (Reader & Bool),~prepareFn:Context -> @+cursor:Maybe<&2,Tick.Tick> -> Reader -> Context & (Reader & (View & Delta)),~commitFn:Context -> Reader -> Delta -> @+cursor:Tick.Tick -> Context & Reader,~releaseFn:Context -> Reader -> Context,~Declaration:Type,~Failure:Data,~Output:Type,~split:Context -> W.World & Meta, 53 declaration:Declaration,parameter:RP.Param,context:Context,reader:Reader) -> Sys.Outcome,Empty,Envelope,Declaration,Failure,Output>>: 54 invalid_parts(~S,~C,~R,~E,~Context,~Meta,~Reader,~View,~Delta,~validateFn,~prepareFn,~commitFn,~releaseFn,~Declaration,~Failure,~Output,declaration,parameter,reader,split(context)) 55 56 def success_succeeded(~S:Data,~C:Type,~R:Type,~E:Data,~Context:Type,~Meta:Type,~Reader:Type,~View:Data,~Delta:Type,~validateFn:Context -> Reader -> Context & (Reader & Bool),~prepareFn:Context -> @+cursor:Maybe<&2,Tick.Tick> -> Reader -> Context & (Reader & (View & Delta)),~commitFn:Context -> Reader -> Delta -> @+cursor:Tick.Tick -> Context & Reader,~releaseFn:Context -> Reader -> Context,~Declaration:Type,~Failure:Data,~Output:Type,~split:Context -> W.World & Meta, 57 reader:Reader,parameter:RP.Param,declaration:Declaration,output:Output,parts:W.World & Meta) -> Sys.Outcome,Empty,Envelope,Declaration,Failure,Output>>: 58 match parts: 59 case (world,meta):Sys.Succeeded{world,Envelope{meta,reader,parameter,declaration,CallbackCompleted{output}}} 60 61 def success_context(~S:Data,~C:Type,~R:Type,~E:Data,~Context:Type,~Meta:Type,~Reader:Type,~View:Data,~Delta:Type,~validateFn:Context -> Reader -> Context & (Reader & Bool),~prepareFn:Context -> @+cursor:Maybe<&2,Tick.Tick> -> Reader -> Context & (Reader & (View & Delta)),~commitFn:Context -> Reader -> Delta -> @+cursor:Tick.Tick -> Context & Reader,~releaseFn:Context -> Reader -> Context,~Declaration:Type,~Failure:Data,~Output:Type,~split:Context -> W.World & Meta,~after:Context -> Context, 62 parameter:RP.Param,declaration:Declaration,output:Output,committed:Context & Reader) -> Sys.Outcome,Empty,Envelope,Declaration,Failure,Output>>: 63 match committed: 64 case (context,reader):success_succeeded(~S,~C,~R,~E,~Context,~Meta,~Reader,~View,~Delta,~validateFn,~prepareFn,~commitFn,~releaseFn,~Declaration,~Failure,~Output,~split,reader,parameter,declaration,output,split(after(context))) 65 66 def commit_success(~S:Data,~C:Type,~R:Type,~E:Data,~Context:Type,~Meta:Type,~Reader:Type,~View:Data,~Delta:Type,~validateFn:Context -> Reader -> Context & (Reader & Bool),~prepareFn:Context -> @+cursor:Maybe<&2,Tick.Tick> -> Reader -> Context & (Reader & (View & Delta)),~commitFn:Context -> Reader -> Delta -> @+cursor:Tick.Tick -> Context & Reader,~releaseFn:Context -> Reader -> Context,~Declaration:Type,~Failure:Data,~Output:Type,~split:Context -> W.World & Meta,~join:W.World -> Meta -> Context,~after:Context -> Context, 67 reader:Reader,+parameter:RP.Param,declaration:Declaration,delta:Delta,cursor:Tick.Tick,output:Output,world:W.World,meta:Meta) -> Sys.Outcome,Empty,Envelope,Declaration,Failure,Output>>: 68 success_context(~S,~C,~R,~E,~Context,~Meta,~Reader,~View,~Delta,~validateFn,~prepareFn,~commitFn,~releaseFn,~Declaration,~Failure,~Output,~split,~after,parameter,declaration,output,RP.commit(~Context,~Reader,~View,~Delta,~validateFn,~prepareFn,~commitFn,~releaseFn,parameter,join(world,meta),reader,delta,cursor)) 69 70 def callback_failure(~S:Data,~C:Type,~R:Type,~E:Data,~Context:Type,~Meta:Type,~Reader:Type,~View:Data,~Delta:Type,~validateFn:Context -> Reader -> Context & (Reader & Bool),~prepareFn:Context -> @+cursor:Maybe<&2,Tick.Tick> -> Reader -> Context & (Reader & (View & Delta)),~commitFn:Context -> Reader -> Delta -> @+cursor:Tick.Tick -> Context & Reader,~releaseFn:Context -> Reader -> Context,~Declaration:Type,~Failure:Data,~Output:Type,~split:Context -> W.World & Meta, 71 reader:Reader,parameter:RP.Param,declaration:Declaration,error:Failure,output:Output,world:W.World,meta:Meta) -> Sys.Outcome,Empty,Envelope,Declaration,Failure,Output>>: 72 Sys.Succeeded{world,Envelope{meta,reader,parameter,declaration,CallbackFailed{error,output}}} 73 74 def inner_outcome(~S:Data,~C:Type,~R:Type,~E:Data,~Context:Type,~Meta:Type,~Reader:Type,~View:Data,~Delta:Type,~validateFn:Context -> Reader -> Context & (Reader & Bool),~prepareFn:Context -> @+cursor:Maybe<&2,Tick.Tick> -> Reader -> Context & (Reader & (View & Delta)),~commitFn:Context -> Reader -> Delta -> @+cursor:Tick.Tick -> Context & Reader,~releaseFn:Context -> Reader -> Context,~Declaration:Type,~Failure:Data,~Output:Type,~split:Context -> W.World & Meta,~join:W.World -> Meta -> Context,~after:Context -> Context, 75 reader:Reader,parameter:RP.Param,declaration:Declaration,delta:Delta,cursor:Tick.Tick,meta:Meta,output:Output,outcome:Tx.Outcome,world:W.World) -> Sys.Outcome,Empty,Envelope,Declaration,Failure,Output>>: 76 match outcome: 77 case Tx.Success{}:commit_success(~S,~C,~R,~E,~Context,~Meta,~Reader,~View,~Delta,~validateFn,~prepareFn,~commitFn,~releaseFn,~Declaration,~Failure,~Output,~split,~join,~after,reader,parameter,declaration,delta,cursor,output,world,meta) 78 case Tx.Failure{error}:callback_failure(~S,~C,~R,~E,~Context,~Meta,~Reader,~View,~Delta,~validateFn,~prepareFn,~commitFn,~releaseFn,~Declaration,~Failure,~Output,~split,reader,parameter,declaration,error,output,world,meta) 79 80 def transaction_returned(~S:Data,~C:Type,~R:Type,~E:Data,~Context:Type,~Meta:Type,~Reader:Type,~View:Data,~Delta:Type,~validateFn:Context -> Reader -> Context & (Reader & Bool),~prepareFn:Context -> @+cursor:Maybe<&2,Tick.Tick> -> Reader -> Context & (Reader & (View & Delta)),~commitFn:Context -> Reader -> Delta -> @+cursor:Tick.Tick -> Context & Reader,~releaseFn:Context -> Reader -> Context,~Declaration:Type,~Failure:Data,~Output:Type,~split:Context -> W.World & Meta,~join:W.World -> Meta -> Context,~after:Context -> Context, 81 reader:Reader,parameter:RP.Param,declaration:Declaration,delta:Delta,cursor:Tick.Tick,meta:Meta,output:Output,finished:Tx.Returned,Failure>) -> Sys.Outcome,Empty,Envelope,Declaration,Failure,Output>>: 82 match finished: 83 case Tx.Returned{world,outcome}:inner_outcome(~S,~C,~R,~E,~Context,~Meta,~Reader,~View,~Delta,~validateFn,~prepareFn,~commitFn,~releaseFn,~Declaration,~Failure,~Output,~split,~join,~after,reader,parameter,declaration,delta,cursor,meta,output,outcome,world) 84 85 def callback_returned(~S:Data,~C:Type,~R:Type,~E:Data,~Context:Type,~Meta:Type,~Reader:Type,~View:Data,~Delta:Type,~Args:Type,~validateFn:Context -> Reader -> Context & (Reader & Bool),~prepareFn:Context -> @+cursor:Maybe<&2,Tick.Tick> -> Reader -> Context & (Reader & (View & Delta)),~commitFn:Context -> Reader -> Delta -> @+cursor:Tick.Tick -> Context & Reader,~releaseFn:Context -> Reader -> Context,~Declaration:Type,~Failure:Data,~Output:Type,~split:Context -> W.World & Meta,~join:W.World -> Meta -> Context,~after:Context -> Context,~Ops:Type -> Type,~body:@-H:Type -> @-caps:Ops(H) -> (View & Args) -> H -> H & (Tx.Outcome & Output),~grant:Ops(Tx.Tx,E>), 86 reader:Reader,parameter:RP.Param,declaration:Declaration,delta:Delta,cursor:Tick.Tick,meta:Meta,observed:Tx.Tx,E> & (Tx.Outcome & Output)) -> Sys.Outcome,Empty,Envelope,Declaration,Failure,Output>>: 87 match observed: 88 case (tx,(outcome,output)):transaction_returned(~S,~C,~R,~E,~Context,~Meta,~Reader,~View,~Delta,~validateFn,~prepareFn,~commitFn,~releaseFn,~Declaration,~Failure,~Output,~split,~join,~after,reader,parameter,declaration,delta,cursor,meta,output,Cmd.tx_finish(~S,~C,~R,~E,~Failure,tx,outcome)) 89 90 def invoke_body(~S:Data,~C:Type,~R:Type,~E:Data,~Context:Type,~Meta:Type,~Reader:Type,~View:Data,~Delta:Type,~Args:Type,~validateFn:Context -> Reader -> Context & (Reader & Bool),~prepareFn:Context -> @+cursor:Maybe<&2,Tick.Tick> -> Reader -> Context & (Reader & (View & Delta)),~commitFn:Context -> Reader -> Delta -> @+cursor:Tick.Tick -> Context & Reader,~releaseFn:Context -> Reader -> Context,~Declaration:Type,~Failure:Data,~Output:Type,~split:Context -> W.World & Meta,~join:W.World -> Meta -> Context,~after:Context -> Context,~Ops:Type -> Type,~body:@-H:Type -> @-caps:Ops(H) -> (View & Args) -> H -> H & (Tx.Outcome & Output),~grant:Ops(Tx.Tx,E>), 91 reader:Reader,parameter:RP.Param,declaration:Declaration,delta:Delta,cursor:Tick.Tick,meta:Meta,args:Args,world:W.World,view:View) -> Sys.Outcome,Empty,Envelope,Declaration,Failure,Output>>: 92 callback_returned(~S,~C,~R,~E,~Context,~Meta,~Reader,~View,~Delta,~Args,~validateFn,~prepareFn,~commitFn,~releaseFn,~Declaration,~Failure,~Output,~split,~join,~after,~Ops,~body,~grant,reader,parameter,declaration,delta,cursor,meta,Cap.invoke_owned(~Ops,~(View & Args),~(Tx.Outcome & Output),~body,~Tx.Tx,E>,~grant,(view,args),Tx.begin(~W.World,~E,world))) 93 94 def prepared_split(~S:Data,~C:Type,~R:Type,~E:Data,~Context:Type,~Meta:Type,~Reader:Type,~View:Data,~Delta:Type,~Args:Type,~validateFn:Context -> Reader -> Context & (Reader & Bool),~prepareFn:Context -> @+cursor:Maybe<&2,Tick.Tick> -> Reader -> Context & (Reader & (View & Delta)),~commitFn:Context -> Reader -> Delta -> @+cursor:Tick.Tick -> Context & Reader,~releaseFn:Context -> Reader -> Context,~Declaration:Type,~Failure:Data,~Output:Type,~split:Context -> W.World & Meta,~join:W.World -> Meta -> Context,~after:Context -> Context,~Ops:Type -> Type,~body:@-H:Type -> @-caps:Ops(H) -> (View & Args) -> H -> H & (Tx.Outcome & Output),~grant:Ops(Tx.Tx,E>), 95 reader:Reader,parameter:RP.Param,declaration:Declaration,delta:Delta,cursor:Tick.Tick,args:Args,view:View,parts:W.World & Meta) -> Sys.Outcome,Empty,Envelope,Declaration,Failure,Output>>: 96 match parts: 97 case (world,meta):invoke_body(~S,~C,~R,~E,~Context,~Meta,~Reader,~View,~Delta,~Args,~validateFn,~prepareFn,~commitFn,~releaseFn,~Declaration,~Failure,~Output,~split,~join,~after,~Ops,~body,~grant,reader,parameter,declaration,delta,cursor,meta,args,world,view) 98 99 def prepared(~S:Data,~C:Type,~R:Type,~E:Data,~Context:Type,~Meta:Type,~Reader:Type,~View:Data,~Delta:Type,~Args:Type,~validateFn:Context -> Reader -> Context & (Reader & Bool),~prepareFn:Context -> @+cursor:Maybe<&2,Tick.Tick> -> Reader -> Context & (Reader & (View & Delta)),~commitFn:Context -> Reader -> Delta -> @+cursor:Tick.Tick -> Context & Reader,~releaseFn:Context -> Reader -> Context,~Declaration:Type,~Failure:Data,~Output:Type,~split:Context -> W.World & Meta,~join:W.World -> Meta -> Context,~after:Context -> Context,~Ops:Type -> Type,~body:@-H:Type -> @-caps:Ops(H) -> (View & Args) -> H -> H & (Tx.Outcome & Output),~grant:Ops(Tx.Tx,E>), 100 parameter:RP.Param,declaration:Declaration,+cursor:Tick.Tick,args:Args,observed:Context & (Reader & (View & Delta))) -> Sys.Outcome,Empty,Envelope,Declaration,Failure,Output>>: 101 match observed: 102 case (context,(reader,(view,delta))):prepared_split(~S,~C,~R,~E,~Context,~Meta,~Reader,~View,~Delta,~Args,~validateFn,~prepareFn,~commitFn,~releaseFn,~Declaration,~Failure,~Output,~split,~join,~after,~Ops,~body,~grant,reader,parameter,declaration,delta,cursor,args,view,split(context)) 103 104 def prepared_context_clock(~S:Data,~C:Type,~R:Type,~E:Data,~Context:Type,~Meta:Type,~Reader:Type,~View:Data,~Delta:Type,~Args:Type,~validateFn:Context -> Reader -> Context & (Reader & Bool),~prepareFn:Context -> @+cursor:Maybe<&2,Tick.Tick> -> Reader -> Context & (Reader & (View & Delta)),~commitFn:Context -> Reader -> Delta -> @+cursor:Tick.Tick -> Context & Reader,~releaseFn:Context -> Reader -> Context,~Declaration:Type,~Failure:Data,~Output:Type,~split:Context -> W.World & Meta,~join:W.World -> Meta -> Context,~after:Context -> Context,~Ops:Type -> Type,~body:@-H:Type -> @-caps:Ops(H) -> (View & Args) -> H -> H & (Tx.Outcome & Output),~grant:Ops(Tx.Tx,E>),+parameter:RP.Param,declaration:Declaration,args:Args,reader:Reader,queryCursor:Maybe<&2,Tick.Tick>,meta:Meta,clocked:W.World & Tick.Tick) -> Sys.Outcome,Empty,Envelope,Declaration,Failure,Output>>: 105 match clocked: 106 case (world,+attemptCursor):prepared(~S,~C,~R,~E,~Context,~Meta,~Reader,~View,~Delta,~Args,~validateFn,~prepareFn,~commitFn,~releaseFn,~Declaration,~Failure,~Output,~split,~join,~after,~Ops,~body,~grant,parameter,declaration,attemptCursor,args,RP.prepare(~Context,~Reader,~View,~Delta,~validateFn,~prepareFn,~commitFn,~releaseFn,parameter,join(world,meta),queryCursor,reader)) 107 108 def prepared_context_parts(~S:Data,~C:Type,~R:Type,~E:Data,~Context:Type,~Meta:Type,~Reader:Type,~View:Data,~Delta:Type,~Args:Type,~validateFn:Context -> Reader -> Context & (Reader & Bool),~prepareFn:Context -> @+cursor:Maybe<&2,Tick.Tick> -> Reader -> Context & (Reader & (View & Delta)),~commitFn:Context -> Reader -> Delta -> @+cursor:Tick.Tick -> Context & Reader,~releaseFn:Context -> Reader -> Context,~Declaration:Type,~Failure:Data,~Output:Type,~split:Context -> W.World & Meta,~join:W.World -> Meta -> Context,~after:Context -> Context,~Ops:Type -> Type,~body:@-H:Type -> @-caps:Ops(H) -> (View & Args) -> H -> H & (Tx.Outcome & Output),~grant:Ops(Tx.Tx,E>),+parameter:RP.Param,declaration:Declaration,args:Args,reader:Reader,queryCursor:Maybe<&2,Tick.Tick>,parts:W.World & Meta) -> Sys.Outcome,Empty,Envelope,Declaration,Failure,Output>>: 109 match parts: 110 case (world,meta):prepared_context_clock(~S,~C,~R,~E,~Context,~Meta,~Reader,~View,~Delta,~Args,~validateFn,~prepareFn,~commitFn,~releaseFn,~Declaration,~Failure,~Output,~split,~join,~after,~Ops,~body,~grant,parameter,declaration,args,reader,queryCursor,meta,W.execution_clock(~S,~C,~R,~E,world)) 111 112 def prepared_context(~S:Data,~C:Type,~R:Type,~E:Data,~Context:Type,~Meta:Type,~Reader:Type,~View:Data,~Delta:Type,~Args:Type,~validateFn:Context -> Reader -> Context & (Reader & Bool),~prepareFn:Context -> @+cursor:Maybe<&2,Tick.Tick> -> Reader -> Context & (Reader & (View & Delta)),~commitFn:Context -> Reader -> Delta -> @+cursor:Tick.Tick -> Context & Reader,~releaseFn:Context -> Reader -> Context,~Declaration:Type,~Failure:Data,~Output:Type,~split:Context -> W.World & Meta,~join:W.World -> Meta -> Context,~after:Context -> Context,~Ops:Type -> Type,~body:@-H:Type -> @-caps:Ops(H) -> (View & Args) -> H -> H & (Tx.Outcome & Output),~grant:Ops(Tx.Tx,E>),parameter:RP.Param,declaration:Declaration,args:Args,reader:Reader,queryCursor:Maybe<&2,Tick.Tick>,context:Context) -> Sys.Outcome,Empty,Envelope,Declaration,Failure,Output>>: 113 prepared_context_parts(~S,~C,~R,~E,~Context,~Meta,~Reader,~View,~Delta,~Args,~validateFn,~prepareFn,~commitFn,~releaseFn,~Declaration,~Failure,~Output,~split,~join,~after,~Ops,~body,~grant,parameter,declaration,args,reader,queryCursor,split(context)) 114 115 def run_validated(~S:Data,~C:Type,~R:Type,~E:Data,~Context:Type,~Meta:Type,~Reader:Type,~View:Data,~Delta:Type,~Args:Type,~validateFn:Context -> Reader -> Context & (Reader & Bool),~prepareFn:Context -> @+cursor:Maybe<&2,Tick.Tick> -> Reader -> Context & (Reader & (View & Delta)),~commitFn:Context -> Reader -> Delta -> @+cursor:Tick.Tick -> Context & Reader,~releaseFn:Context -> Reader -> Context,~Declaration:Type,~Failure:Data,~Output:Type,~split:Context -> W.World & Meta,~join:W.World -> Meta -> Context,~before:Context -> Context,~after:Context -> Context,~Ops:Type -> Type,~body:@-H:Type -> @-caps:Ops(H) -> (View & Args) -> H -> H & (Tx.Outcome & Output),~grant:Ops(Tx.Tx,E>), 116 reader:Reader,+parameter:RP.Param,declaration:Declaration,args:Args,queryCursor:Maybe<&2,Tick.Tick>,context:Context) -> Sys.Outcome,Empty,Envelope,Declaration,Failure,Output>>: 117 prepared_context(~S,~C,~R,~E,~Context,~Meta,~Reader,~View,~Delta,~Args,~validateFn,~prepareFn,~commitFn,~releaseFn,~Declaration,~Failure,~Output,~split,~join,~after,~Ops,~body,~grant,parameter,declaration,args,reader,queryCursor,before(context)) 118 119 def validated(~S:Data,~C:Type,~R:Type,~E:Data,~Context:Type,~Meta:Type,~Reader:Type,~View:Data,~Delta:Type,~Args:Type,~validateFn:Context -> Reader -> Context & (Reader & Bool),~prepareFn:Context -> @+cursor:Maybe<&2,Tick.Tick> -> Reader -> Context & (Reader & (View & Delta)),~commitFn:Context -> Reader -> Delta -> @+cursor:Tick.Tick -> Context & Reader,~releaseFn:Context -> Reader -> Context,~Declaration:Type,~Failure:Data,~Output:Type,~split:Context -> W.World & Meta,~join:W.World -> Meta -> Context,~before:Context -> Context,~after:Context -> Context,~Ops:Type -> Type,~body:@-H:Type -> @-caps:Ops(H) -> (View & Args) -> H -> H & (Tx.Outcome & Output),~grant:Ops(Tx.Tx,E>), 120 +parameter:RP.Param,declaration:Declaration,args:Args,queryCursor:Maybe<&2,Tick.Tick>,observed:Context & (Reader & Bool)) -> Sys.Outcome,Empty,Envelope,Declaration,Failure,Output>>: 121 match observed: 122 case (context,(reader,False{})):invalid_reader(~S,~C,~R,~E,~Context,~Meta,~Reader,~View,~Delta,~validateFn,~prepareFn,~commitFn,~releaseFn,~Declaration,~Failure,~Output,~split,declaration,parameter,context,reader) 123 case (context,(reader,True{})):run_validated(~S,~C,~R,~E,~Context,~Meta,~Reader,~View,~Delta,~Args,~validateFn,~prepareFn,~commitFn,~releaseFn,~Declaration,~Failure,~Output,~split,~join,~before,~after,~Ops,~body,~grant,reader,parameter,declaration,args,queryCursor,context) 124 125 def runner(~S:Data,~C:Type,~R:Type,~E:Data,~Context:Type,~Meta:Type,~Reader:Type,~View:Data,~Delta:Type,~Args:Type,~Declaration:Type,~Failure:Data,~Output:Type,~validateFn:Context -> Reader -> Context & (Reader & Bool),~prepareFn:Context -> @+cursor:Maybe<&2,Tick.Tick> -> Reader -> Context & (Reader & (View & Delta)),~commitFn:Context -> Reader -> Delta -> @+cursor:Tick.Tick -> Context & Reader,~releaseFn:Context -> Reader -> Context,~split:Context -> W.World & Meta,~join:W.World -> Meta -> Context,~before:Context -> Context,~after:Context -> Context,~Ops:Type -> Type,~body:@-H:Type -> @-caps:Ops(H) -> (View & Args) -> H -> H & (Tx.Outcome & Output),~grant:Ops(Tx.Tx,E>), 126 world:W.World,input:Invocation,Declaration,Args>) -> Sys.Outcome,Empty,Envelope,Declaration,Failure,Output>>: 127 match input: 128 case Invocation{meta,reader,+parameter,declaration,args,queryCursor}: 129 validated(~S,~C,~R,~E,~Context,~Meta,~Reader,~View,~Delta,~Args,~validateFn,~prepareFn,~commitFn,~releaseFn,~Declaration,~Failure,~Output,~split,~join,~before,~after,~Ops,~body,~grant,parameter,declaration,args,queryCursor,RP.validate(~Context,~Reader,~View,~Delta,~validateFn,~prepareFn,~commitFn,~releaseFn,parameter,join(world,meta),reader)) 130 131 def run_selected(~S:Data,~C:Type,~R:Type,~E:Data,~Context:Type,~Meta:Type,~Reader:Type,~View:Data,~Delta:Type,~Args:Type,~Declaration:Type,~Failure:Data,~Output:Type,~validateFn:Context -> Reader -> Context & (Reader & Bool),~prepareFn:Context -> @+cursor:Maybe<&2,Tick.Tick> -> Reader -> Context & (Reader & (View & Delta)),~commitFn:Context -> Reader -> Delta -> @+cursor:Tick.Tick -> Context & Reader,~releaseFn:Context -> Reader -> Context, 132 ~runFn:W.World -> Invocation,Declaration,Args> -> Sys.Outcome,Empty,Envelope,Declaration,Failure,Output>>, 133 world:W.World,meta:Meta,reader:Reader,+parameter:RP.Param,declaration:Declaration,args:Args,selected:Sys.Registry,Declaration,Args>,Empty,Envelope,Declaration,Failure,Output>,runFn> & Maybe<&2,Tick.Tick>) -> Sys.RunResult,Declaration,Args>,Empty,Envelope,Declaration,Failure,Output>,runFn>: 134 match selected: 135 case (registry,queryCursor):Sys.run(~S,~C,~R,~E,~(Invocation,Declaration,Args>),~Empty,~(Envelope,Declaration,Failure,Output>),~runFn,registry,world,Invocation{meta,reader,parameter,declaration,args,queryCursor}) 136 137 def run_registered(~S:Data,~C:Type,~R:Type,~E:Data,~Context:Type,~Meta:Type,~Reader:Type,~View:Data,~Delta:Type,~Args:Type,~Declaration:Type,~Failure:Data,~Output:Type,~validateFn:Context -> Reader -> Context & (Reader & Bool),~prepareFn:Context -> @+cursor:Maybe<&2,Tick.Tick> -> Reader -> Context & (Reader & (View & Delta)),~commitFn:Context -> Reader -> Delta -> @+cursor:Tick.Tick -> Context & Reader,~releaseFn:Context -> Reader -> Context, 138 ~runFn:W.World -> Invocation,Declaration,Args> -> Sys.Outcome,Empty,Envelope,Declaration,Failure,Output>>, 139 registry:Sys.Registry,Declaration,Args>,Empty,Envelope,Declaration,Failure,Output>,runFn>,world:W.World,meta:Meta,reader:Reader,+parameter:RP.Param,declaration:Declaration,args:Args) -> Sys.RunResult,Declaration,Args>,Empty,Envelope,Declaration,Failure,Output>,runFn>: 140 run_selected(~S,~C,~R,~E,~Context,~Meta,~Reader,~View,~Delta,~Args,~Declaration,~Failure,~Output,~validateFn,~prepareFn,~commitFn,~releaseFn,~runFn,world,meta,reader,parameter,declaration,args,Sys.cursor(~S,~C,~R,~E,~(Invocation,Declaration,Args>),~Empty,~(Envelope,Declaration,Failure,Output>),~runFn,registry)) 141 142 143 type ProviderDisposal is Type: 144 ProviderDisposed{context:Context,declaration:Declaration} 145 ProviderDisposalRejected{context:Context,provider:Provider} 146 147 def provider_disposal_result(~S:Data,~C:Type,~R:Type,~E:Data,~Context:Type,~Meta:Type,~Reader:Type,~View:Data,~Delta:Type,~Args:Type,~Declaration:Type,~Failure:Data,~Output:Type, 148 ~validateFn:Context -> Reader -> Context & (Reader & Bool), 149 ~prepareFn:Context -> @+cursor:Maybe<&2,Tick.Tick> -> Reader -> Context & (Reader & (View & Delta)), 150 ~commitFn:Context -> Reader -> Delta -> @+cursor:Tick.Tick -> Context & Reader, 151 ~releaseFn:Context -> Reader -> Context, 152 ~join:W.World -> Meta -> Context, 153 ~runFn:W.World -> Invocation,Declaration,Args> -> Sys.Outcome,Empty,Envelope,Declaration,Failure,Output>>, 154 reader:Reader,+parameter:RP.Param,declaration:Declaration,meta:Meta, 155 disposed:Sys.Disposal,Declaration,Args>,Empty,Envelope,Declaration,Failure,Output>,runFn>) -> ProviderDisposal,Declaration,Args>,Empty,Envelope,Declaration,Failure,Output>,runFn>,Reader,RP.Param,Declaration>,Declaration>: 156 match disposed: 157 case Sys.Disposed{world}:ProviderDisposed{RP.release(~Context,~Reader,~View,~Delta,~validateFn,~prepareFn,~commitFn,~releaseFn,parameter,join(world,meta),reader),declaration} 158 case Sys.DisposalRejected{world,registry}:ProviderDisposalRejected{join(world,meta),Provider{registry,reader,parameter,declaration}} 159 160 def provider_dispose_parts(~S:Data,~C:Type,~R:Type,~E:Data,~Context:Type,~Meta:Type,~Reader:Type,~View:Data,~Delta:Type,~Args:Type,~Declaration:Type,~Failure:Data,~Output:Type, 161 ~validateFn:Context -> Reader -> Context & (Reader & Bool), 162 ~prepareFn:Context -> @+cursor:Maybe<&2,Tick.Tick> -> Reader -> Context & (Reader & (View & Delta)), 163 ~commitFn:Context -> Reader -> Delta -> @+cursor:Tick.Tick -> Context & Reader, 164 ~releaseFn:Context -> Reader -> Context, 165 ~join:W.World -> Meta -> Context, 166 ~runFn:W.World -> Invocation,Declaration,Args> -> Sys.Outcome,Empty,Envelope,Declaration,Failure,Output>>, 167 registry:Sys.Registry,Declaration,Args>,Empty,Envelope,Declaration,Failure,Output>,runFn>,reader:Reader,+parameter:RP.Param,declaration:Declaration, 168 parts:W.World & Meta) -> ProviderDisposal,Declaration,Args>,Empty,Envelope,Declaration,Failure,Output>,runFn>,Reader,RP.Param,Declaration>,Declaration>: 169 match parts: 170 case (world,meta):provider_disposal_result(~S,~C,~R,~E,~Context,~Meta,~Reader,~View,~Delta,~Args,~Declaration,~Failure,~Output,~validateFn,~prepareFn,~commitFn,~releaseFn,~join,~runFn,reader,parameter,declaration,meta,Sys.dispose(~S,~C,~R,~E,~(Invocation,Declaration,Args>),~Empty,~(Envelope,Declaration,Failure,Output>),~runFn,registry,world)) 171 172 def dispose_provider(~S:Data,~C:Type,~R:Type,~E:Data,~Context:Type,~Meta:Type,~Reader:Type,~View:Data,~Delta:Type,~Args:Type,~Declaration:Type,~Failure:Data,~Output:Type, 173 ~validateFn:Context -> Reader -> Context & (Reader & Bool), 174 ~prepareFn:Context -> @+cursor:Maybe<&2,Tick.Tick> -> Reader -> Context & (Reader & (View & Delta)), 175 ~commitFn:Context -> Reader -> Delta -> @+cursor:Tick.Tick -> Context & Reader, 176 ~releaseFn:Context -> Reader -> Context, 177 ~split:Context -> W.World & Meta,~join:W.World -> Meta -> Context, 178 ~runFn:W.World -> Invocation,Declaration,Args> -> Sys.Outcome,Empty,Envelope,Declaration,Failure,Output>>, 179 provider:Provider,Declaration,Args>,Empty,Envelope,Declaration,Failure,Output>,runFn>,Reader,RP.Param,Declaration>,context:Context) -> ProviderDisposal,Declaration,Args>,Empty,Envelope,Declaration,Failure,Output>,runFn>,Reader,RP.Param,Declaration>,Declaration>: 180 match provider: 181 case Provider{registry,reader,+parameter,declaration}:provider_dispose_parts(~S,~C,~R,~E,~Context,~Meta,~Reader,~View,~Delta,~Args,~Declaration,~Failure,~Output,~validateFn,~prepareFn,~commitFn,~releaseFn,~join,~runFn,registry,reader,parameter,declaration,split(context)) 182 183 184 185 def definition_cleanup_result(~Context:Type,~Reader:Type,~View:Data,~Delta:Type,~Declaration:Type,~Registry:Type, 186 ~validateFn:Context -> Reader -> Context & (Reader & Bool), 187 ~prepareFn:Context -> @+cursor:Maybe<&2,Tick.Tick> -> Reader -> Context & (Reader & (View & Delta)), 188 ~commitFn:Context -> Reader -> Delta -> @+cursor:Tick.Tick -> Context & Reader, 189 ~releaseFn:Context -> Reader -> Context, 190 descriptor:RP.Param, 191 disposed:ProviderDisposal,Declaration>,Declaration>) -> Definition,Declaration>,RP.Param,Declaration>: 192 match disposed: 193 case ProviderDisposed{context,declaration}:DefinitionRejected{context,descriptor,declaration} 194 case ProviderDisposalRejected{context,provider}:DefinitionDisposalRejected{context,provider,descriptor} 195 196 def initialized_checked(~S:Data,~C:Type,~R:Type,~E:Data,~Context:Type,~Meta:Type,~Reader:Type,~View:Data,~Delta:Type,~Args:Type,~Declaration:Type,~Failure:Data,~Output:Type,~Facts:Data, 197 ~validateFn:Context -> Reader -> Context & (Reader & Bool),~prepareFn:Context -> @+cursor:Maybe<&2,Tick.Tick> -> Reader -> Context & (Reader & (View & Delta)),~commitFn:Context -> Reader -> Delta -> @+cursor:Tick.Tick -> Context & Reader,~releaseFn:Context -> Reader -> Context, 198 ~split:Context -> W.World & Meta,~join:W.World -> Meta -> Context, 199 ~runFn:W.World -> Invocation,Declaration,Args> -> Sys.Outcome,Empty,Envelope,Declaration,Failure,Output>>, 200 descriptor:RP.Param,declaration:Declaration,registry:Sys.Registry,Declaration,Args>,Empty,Envelope,Declaration,Failure,Output>,runFn>,parameter:RP.Param,checked:Context & (Reader & Bool)) -> Definition,Declaration,Args>,Empty,Envelope,Declaration,Failure,Output>,runFn>,Reader,RP.Param,Declaration>,RP.Param,Declaration>: 201 match checked: 202 case (context,(reader,True{})):DefinitionRegistered{context,Provider{registry,reader,parameter,declaration}} 203 case (context,(reader,False{})): 204 definition_cleanup_result(~Context,~Reader,~View,~Delta,~Declaration,~(Sys.Registry,Declaration,Args>,Empty,Envelope,Declaration,Failure,Output>,runFn>),~validateFn,~prepareFn,~commitFn,~releaseFn,descriptor, 205 dispose_provider(~S,~C,~R,~E,~Context,~Meta,~Reader,~View,~Delta,~Args,~Declaration,~Failure,~Output,~validateFn,~prepareFn,~commitFn,~releaseFn,~split,~join,~runFn,Provider{registry,reader,parameter,declaration},context)) 206 207 def initialized_values(~S:Data,~C:Type,~R:Type,~E:Data,~Context:Type,~Meta:Type,~Reader:Type,~View:Data,~Delta:Type,~Args:Type,~Declaration:Type,~Failure:Data,~Output:Type,~Facts:Data, 208 ~validateFn:Context -> Reader -> Context & (Reader & Bool),~prepareFn:Context -> @+cursor:Maybe<&2,Tick.Tick> -> Reader -> Context & (Reader & (View & Delta)),~commitFn:Context -> Reader -> Delta -> @+cursor:Tick.Tick -> Context & Reader,~releaseFn:Context -> Reader -> Context, 209 ~split:Context -> W.World & Meta,~join:W.World -> Meta -> Context, 210 ~runFn:W.World -> Invocation,Declaration,Args> -> Sys.Outcome,Empty,Envelope,Declaration,Failure,Output>>, 211 descriptor:RP.Param,declaration:Declaration,registry:Sys.Registry,Declaration,Args>,Empty,Envelope,Declaration,Failure,Output>,runFn>,initialized:Context & (Reader & RP.Param)) -> Definition,Declaration,Args>,Empty,Envelope,Declaration,Failure,Output>,runFn>,Reader,RP.Param,Declaration>,RP.Param,Declaration>: 212 match initialized: 213 case (context,(reader,parameter)):initialized_checked(~S,~C,~R,~E,~Context,~Meta,~Reader,~View,~Delta,~Args,~Declaration,~Failure,~Output,~Facts,~validateFn,~prepareFn,~commitFn,~releaseFn,~split,~join,~runFn,descriptor,declaration,registry,parameter,validateFn(context,reader)) 214 215 def initialized_provider(~S:Data,~C:Type,~R:Type,~E:Data,~Context:Type,~Meta:Type,~Reader:Type,~View:Data,~Delta:Type,~Args:Type,~Declaration:Type,~Failure:Data,~Output:Type,~Facts:Data, 216 ~validateFn:Context -> Reader -> Context & (Reader & Bool),~prepareFn:Context -> @+cursor:Maybe<&2,Tick.Tick> -> Reader -> Context & (Reader & (View & Delta)),~commitFn:Context -> Reader -> Delta -> @+cursor:Tick.Tick -> Context & Reader,~releaseFn:Context -> Reader -> Context, 217 ~split:Context -> W.World & Meta,~join:W.World -> Meta -> Context, 218 ~runFn:W.World -> Invocation,Declaration,Args> -> Sys.Outcome,Empty,Envelope,Declaration,Failure,Output>>, 219 ~initialize:Context -> Facts -> Context & (Reader & RP.Param), 220 descriptor:RP.Param,declaration:Declaration,context:Context,registered:Sys.Registry,Declaration,Args>,Empty,Envelope,Declaration,Failure,Output>,runFn> & Facts) -> Definition,Declaration,Args>,Empty,Envelope,Declaration,Failure,Output>,runFn>,Reader,RP.Param,Declaration>,RP.Param,Declaration>: 221 match registered: 222 case (registry,facts):initialized_values(~S,~C,~R,~E,~Context,~Meta,~Reader,~View,~Delta,~Args,~Declaration,~Failure,~Output,~Facts,~validateFn,~prepareFn,~commitFn,~releaseFn,~split,~join,~runFn,descriptor,declaration,registry,initialize(context,facts)) 223 224 def registration_result(~S:Data,~C:Type,~R:Type,~E:Data,~Context:Type,~Meta:Type,~Reader:Type,~View:Data,~Delta:Type,~Args:Type,~Declaration:Type,~Failure:Data,~Output:Type,~Facts:Data, 225 ~validateFn:Context -> Reader -> Context & (Reader & Bool),~prepareFn:Context -> @+cursor:Maybe<&2,Tick.Tick> -> Reader -> Context & (Reader & (View & Delta)),~commitFn:Context -> Reader -> Delta -> @+cursor:Tick.Tick -> Context & Reader,~releaseFn:Context -> Reader -> Context, 226 ~split:Context -> W.World & Meta,~join:W.World -> Meta -> Context, 227 ~runner:W.World -> Invocation,Declaration,Args> -> Sys.Outcome,Empty,Envelope,Declaration,Failure,Output>>, 228 ~factsFn:Sys.Registry,Declaration,Args>,Empty,Envelope,Declaration,Failure,Output>,runner> -> Sys.Registry,Declaration,Args>,Empty,Envelope,Declaration,Failure,Output>,runner> & Facts, 229 ~initialize:Context -> Facts -> Context & (Reader & RP.Param), 230 descriptor:RP.Param,declaration:Declaration,meta:Meta, 231 result:Sys.RegistrationResult,Declaration,Args>,Empty,Envelope,Declaration,Failure,Output>,runner>) -> Definition,Declaration,Args>,Empty,Envelope,Declaration,Failure,Output>,runner>,Reader,RP.Param,Declaration>,RP.Param,Declaration>: 232 match result: 233 case Sys.RegistrationFailed{world}:DefinitionRejected{join(world,meta),descriptor,declaration} 234 case Sys.Registered{world,registry}:initialized_provider(~S,~C,~R,~E,~Context,~Meta,~Reader,~View,~Delta,~Args,~Declaration,~Failure,~Output,~Facts,~validateFn,~prepareFn,~commitFn,~releaseFn,~split,~join,~runner,~initialize,descriptor,declaration,join(world,meta),factsFn(registry)) 235 236 def registered_parts(~S:Data,~C:Type,~R:Type,~E:Data,~Context:Type,~Meta:Type,~Reader:Type,~View:Data,~Delta:Type,~Args:Type,~Declaration:Type,~Failure:Data,~Output:Type,~Facts:Data, 237 ~validateFn:Context -> Reader -> Context & (Reader & Bool),~prepareFn:Context -> @+cursor:Maybe<&2,Tick.Tick> -> Reader -> Context & (Reader & (View & Delta)),~commitFn:Context -> Reader -> Delta -> @+cursor:Tick.Tick -> Context & Reader,~releaseFn:Context -> Reader -> Context, 238 ~split:Context -> W.World & Meta,~join:W.World -> Meta -> Context,~runner:W.World -> Invocation,Declaration,Args> -> Sys.Outcome,Empty,Envelope,Declaration,Failure,Output>>, 239 ~factsFn:Sys.Registry,Declaration,Args>,Empty,Envelope,Declaration,Failure,Output>,runner> -> Sys.Registry,Declaration,Args>,Empty,Envelope,Declaration,Failure,Output>,runner> & Facts, 240 ~initialize:Context -> Facts -> Context & (Reader & RP.Param), 241 descriptor:RP.Param,declaration:Declaration,meta:Meta, 242 result:Sys.RegistrationResult,Declaration,Args>,Empty,Envelope,Declaration,Failure,Output>,runner>) -> Definition,Declaration,Args>,Empty,Envelope,Declaration,Failure,Output>,runner>,Reader,RP.Param,Declaration>,RP.Param,Declaration>: 243 registration_result(~S,~C,~R,~E,~Context,~Meta,~Reader,~View,~Delta,~Args,~Declaration,~Failure,~Output,~Facts,~validateFn,~prepareFn,~commitFn,~releaseFn,~split,~join,~runner,~factsFn,~initialize,descriptor,declaration,meta,result) 244 245 def define_world(~S:Data,~C:Type,~R:Type,~E:Data,~Context:Type,~Meta:Type,~Reader:Type,~View:Data,~Delta:Type,~Args:Type,~Declaration:Type,~Failure:Data,~Output:Type,~Facts:Data, 246 ~validateFn:Context -> Reader -> Context & (Reader & Bool),~prepareFn:Context -> @+cursor:Maybe<&2,Tick.Tick> -> Reader -> Context & (Reader & (View & Delta)),~commitFn:Context -> Reader -> Delta -> @+cursor:Tick.Tick -> Context & Reader,~releaseFn:Context -> Reader -> Context, 247 ~split:Context -> W.World & Meta,~join:W.World -> Meta -> Context, 248 ~runner:W.World -> Invocation,Declaration,Args> -> Sys.Outcome,Empty,Envelope,Declaration,Failure,Output>>, 249 ~factsFn:Sys.Registry,Declaration,Args>,Empty,Envelope,Declaration,Failure,Output>,runner> -> Sys.Registry,Declaration,Args>,Empty,Envelope,Declaration,Failure,Output>,runner> & Facts, 250 ~initialize:Context -> Facts -> Context & (Reader & RP.Param), 251 descriptor:RP.Param,declaration:Declaration,name:String,access:List<&2,String>,parts:W.World & Meta) -> Definition,Declaration,Args>,Empty,Envelope,Declaration,Failure,Output>,runner>,Reader,RP.Param,Declaration>,RP.Param,Declaration>: 252 match parts: 253 case (world,meta):registered_parts(~S,~C,~R,~E,~Context,~Meta,~Reader,~View,~Delta,~Args,~Declaration,~Failure,~Output,~Facts,~validateFn,~prepareFn,~commitFn,~releaseFn,~split,~join,~runner,~factsFn,~initialize,descriptor,declaration,meta,Sys.register(~S,~C,~R,~E,~(Invocation,Declaration,Args>),~Empty,~Envelope,Declaration,Failure,Output>,~runner,world,name,access)) 254 255 def define_access(~S:Data,~C:Type,~R:Type,~E:Data,~Context:Type,~Meta:Type,~Reader:Type,~View:Data,~Delta:Type,~Args:Type,~Declaration:Type,~Failure:Data,~Output:Type,~Facts:Data, 256 ~validateFn:Context -> Reader -> Context & (Reader & Bool),~prepareFn:Context -> @+cursor:Maybe<&2,Tick.Tick> -> Reader -> Context & (Reader & (View & Delta)),~commitFn:Context -> Reader -> Delta -> @+cursor:Tick.Tick -> Context & Reader,~releaseFn:Context -> Reader -> Context, 257 ~split:Context -> W.World & Meta,~join:W.World -> Meta -> Context, 258 ~runner:W.World -> Invocation,Declaration,Args> -> Sys.Outcome,Empty,Envelope,Declaration,Failure,Output>>, 259 ~factsFn:Sys.Registry,Declaration,Args>,Empty,Envelope,Declaration,Failure,Output>,runner> -> Sys.Registry,Declaration,Args>,Empty,Envelope,Declaration,Failure,Output>,runner> & Facts, 260 ~initialize:Context -> Facts -> Context & (Reader & RP.Param), 261 declaration:Declaration,context:Context,name:String, 262 accessed:RP.Param & List<&2,String>) -> Definition,Declaration,Args>,Empty,Envelope,Declaration,Failure,Output>,runner>,Reader,RP.Param,Declaration>,RP.Param,Declaration>: 263 match accessed: 264 case (descriptor,access):define_world(~S,~C,~R,~E,~Context,~Meta,~Reader,~View,~Delta,~Args,~Declaration,~Failure,~Output,~Facts,~validateFn,~prepareFn,~commitFn,~releaseFn,~split,~join,~runner,~factsFn,~initialize,descriptor,declaration,name,access,split(context)) 265 266 def define(~S:Data,~C:Type,~R:Type,~E:Data,~Context:Type,~Meta:Type,~Reader:Type,~View:Data,~Delta:Type,~Args:Type,~Declaration:Type,~Failure:Data,~Output:Type,~Facts:Data, 267 ~validateFn:Context -> Reader -> Context & (Reader & Bool),~prepareFn:Context -> @+cursor:Maybe<&2,Tick.Tick> -> Reader -> Context & (Reader & (View & Delta)),~commitFn:Context -> Reader -> Delta -> @+cursor:Tick.Tick -> Context & Reader,~releaseFn:Context -> Reader -> Context, 268 ~split:Context -> W.World & Meta,~join:W.World -> Meta -> Context,~before:Context -> Context,~after:Context -> Context, 269 ~Ops:Type -> Type,~body:@-H:Type -> @-caps:Ops(H) -> (View & Args) -> H -> H & (Tx.Outcome & Output),~grant:Ops(Tx.Tx,E>), 270 ~factsFn:Sys.Registry,Declaration,Args>,Empty,Envelope,Declaration,Failure,Output>,runner(~S,~C,~R,~E,~Context,~Meta,~Reader,~View,~Delta,~Args,~Declaration,~Failure,~Output,~validateFn,~prepareFn,~commitFn,~releaseFn,~split,~join,~before,~after,~Ops,~body,~grant)> -> Sys.Registry,Declaration,Args>,Empty,Envelope,Declaration,Failure,Output>,runner(~S,~C,~R,~E,~Context,~Meta,~Reader,~View,~Delta,~Args,~Declaration,~Failure,~Output,~validateFn,~prepareFn,~commitFn,~releaseFn,~split,~join,~before,~after,~Ops,~body,~grant)> & Facts, 271 ~initialize:Context -> Facts -> Context & (Reader & RP.Param), 272 descriptor:RP.Param,declaration:Declaration,context:Context,name:String) -> Definition,Declaration,Args>,Empty,Envelope,Declaration,Failure,Output>,runner(~S,~C,~R,~E,~Context,~Meta,~Reader,~View,~Delta,~Args,~Declaration,~Failure,~Output,~validateFn,~prepareFn,~commitFn,~releaseFn,~split,~join,~before,~after,~Ops,~body,~grant)>,Reader,RP.Param,Declaration>,RP.Param,Declaration>: 273 define_access(~S,~C,~R,~E,~Context,~Meta,~Reader,~View,~Delta,~Args,~Declaration,~Failure,~Output,~Facts,~validateFn,~prepareFn,~commitFn,~releaseFn,~split,~join,~runner(~S,~C,~R,~E,~Context,~Meta,~Reader,~View,~Delta,~Args,~Declaration,~Failure,~Output,~validateFn,~prepareFn,~commitFn,~releaseFn,~split,~join,~before,~after,~Ops,~body,~grant),~factsFn,~initialize,declaration,context,name,RP.access(~Context,~Reader,~View,~Delta,~validateFn,~prepareFn,~commitFn,~releaseFn,descriptor)) 274 275 # Canonical shared-context hooks are fixed by the library entry. Applications 276 # supply only the closed publication router and failure classifier for their 277 # declared event schema; split/join and transaction ordering stay internal. 278 def mixed_before_attempt(~S:Data,~C:Type,~R:Type,~P:Data,~F:Type,~H:Type, 279 ~sync:F -> Nat -> List<&2,P> -> F, 280 ~classify:Notice.Notice -> Maybe>, 281 context:Route.Runtime,Mixed.State>) -> Route.Runtime,Mixed.State>: 282 Mixed.before_attempt(~S,~C,~R,~P,~F,~H,~sync,~classify,context) 283 284 def mixed_after_success(~S:Data,~C:Type,~R:Type,~P:Data,~F:Type,~H:Type, 285 ~sync:F -> Nat -> List<&2,P> -> F, 286 ~classify:Notice.Notice -> Maybe>, 287 context:Route.Runtime,Mixed.State>) -> Route.Runtime,Mixed.State>: 288 Mixed.after_success(~S,~C,~R,~P,~F,~H,~sync,~classify,context) 289 290 def shared_runner(~S:Data,~C:Type,~R:Type,~P:Data,~F:Type,~H:Type, 291 ~Reader:Type,~View:Data,~Delta:Type,~Args:Type,~Declaration:Type,~Failure:Data,~Output:Type, 292 ~validateFn:Route.Runtime,Mixed.State> -> Reader -> Route.Runtime,Mixed.State> & (Reader & Bool), 293 ~prepareFn:Route.Runtime,Mixed.State> -> @+cursor:Maybe<&2,Tick.Tick> -> Reader -> Route.Runtime,Mixed.State> & (Reader & (View & Delta)), 294 ~commitFn:Route.Runtime,Mixed.State> -> Reader -> Delta -> @+cursor:Tick.Tick -> Route.Runtime,Mixed.State> & Reader,~releaseFn:Route.Runtime,Mixed.State> -> Reader -> Route.Runtime,Mixed.State>, 295 ~Ops:Type -> Type, 296 ~body:@-K:Type -> @-caps:Ops(K) -> (View & Args) -> K -> K & (Tx.Outcome & Output), 297 ~grant:Ops(Tx.Tx>,Notice.Notice>), 298 ~sync:F -> Nat -> List<&2,P> -> F, 299 ~classify:Notice.Notice -> Maybe>, 300 world:W.World>, 301 input:Invocation<(Mixed.State & Nat),Reader,RP.Param,Mixed.State>,Reader,View,Delta,validateFn,prepareFn,commitFn,releaseFn>,Declaration,Args>) -> Sys.Outcome>,Empty,Envelope<(Mixed.State & Nat),Reader,RP.Param,Mixed.State>,Reader,View,Delta,validateFn,prepareFn,commitFn,releaseFn>,Declaration,Failure,Output>>: 302 runner(~S,~C,~R,~Notice.Notice,~Route.Runtime,Mixed.State>,~(Mixed.State & Nat),~Reader,~View,~Delta,~Args,~Declaration,~Failure,~Output, 303 ~validateFn,~prepareFn,~commitFn,~releaseFn,~Mixed.split(~S,~C,~R,~P,~F,~H),~Mixed.join(~S,~C,~R,~P,~F,~H), 304 ~mixed_before_attempt(~S,~C,~R,~P,~F,~H,~sync,~classify), 305 ~mixed_after_success(~S,~C,~R,~P,~F,~H,~sync,~classify),~Ops,~body,~grant,world,input) 306 307 def define_mixed(~S:Data,~C:Type,~R:Type,~P:Data,~F:Type,~H:Type, 308 ~Reader:Type,~View:Data,~Delta:Type,~Args:Type,~Declaration:Type,~Failure:Data,~Output:Type, 309 ~validateFn:Route.Runtime,Mixed.State> -> Reader -> Route.Runtime,Mixed.State> & (Reader & Bool), 310 ~prepareFn:Route.Runtime,Mixed.State> -> @+cursor:Maybe<&2,Tick.Tick> -> Reader -> Route.Runtime,Mixed.State> & (Reader & (View & Delta)), 311 ~commitFn:Route.Runtime,Mixed.State> -> Reader -> Delta -> @+cursor:Tick.Tick -> Route.Runtime,Mixed.State> & Reader,~releaseFn:Route.Runtime,Mixed.State> -> Reader -> Route.Runtime,Mixed.State>, 312 ~Ops:Type -> Type, 313 ~body:@-K:Type -> @-caps:Ops(K) -> (View & Args) -> K -> K & (Tx.Outcome & Output), 314 ~grant:Ops(Tx.Tx>,Notice.Notice>), 315 ~sync:F -> Nat -> List<&2,P> -> F, 316 ~classify:Notice.Notice -> Maybe>, 317 ~initialize:Route.Runtime,Mixed.State> -> RP.RegistrationFacts -> Route.Runtime,Mixed.State> & (Reader & RP.Param,Mixed.State>,Reader,View,Delta,validateFn,prepareFn,commitFn,releaseFn>), 318 descriptor:RP.Param,Mixed.State>,Reader,View,Delta,validateFn,prepareFn,commitFn,releaseFn>, 319 declaration:Declaration,context:Route.Runtime,Mixed.State>,name:String) -> Definition,Mixed.State>,Provider,Invocation<(Mixed.State & Nat),Reader,RP.Param,Mixed.State>,Reader,View,Delta,validateFn,prepareFn,commitFn,releaseFn>,Declaration,Args>,Empty,Envelope<(Mixed.State & Nat),Reader,RP.Param,Mixed.State>,Reader,View,Delta,validateFn,prepareFn,commitFn,releaseFn>,Declaration,Failure,Output>,shared_runner(~S,~C,~R,~P,~F,~H,~Reader,~View,~Delta,~Args,~Declaration,~Failure,~Output,~validateFn,~prepareFn,~commitFn,~releaseFn,~Ops,~body,~grant,~sync,~classify)>,Reader,RP.Param,Mixed.State>,Reader,View,Delta,validateFn,prepareFn,commitFn,releaseFn>,Declaration>,RP.Param,Mixed.State>,Reader,View,Delta,validateFn,prepareFn,commitFn,releaseFn>,Declaration>: 320 define_access(~S,~C,~R,~Notice.Notice,~Route.Runtime,Mixed.State>,~(Mixed.State & Nat),~Reader,~View,~Delta,~Args,~Declaration,~Failure,~Output,~RP.RegistrationFacts,~validateFn,~prepareFn,~commitFn,~releaseFn,~Mixed.split(~S,~C,~R,~P,~F,~H),~Mixed.join(~S,~C,~R,~P,~F,~H),~shared_runner(~S,~C,~R,~P,~F,~H,~Reader,~View,~Delta,~Args,~Declaration,~Failure,~Output,~validateFn,~prepareFn,~commitFn,~releaseFn,~Ops,~body,~grant,~sync,~classify),~RP.registration_facts(~S,~C,~R,~Notice.Notice,~Invocation<(Mixed.State & Nat),Reader,RP.Param,Mixed.State>,Reader,View,Delta,validateFn,prepareFn,commitFn,releaseFn>,Declaration,Args>,~Empty,~Envelope<(Mixed.State & Nat),Reader,RP.Param,Mixed.State>,Reader,View,Delta,validateFn,prepareFn,commitFn,releaseFn>,Declaration,Failure,Output>,~shared_runner(~S,~C,~R,~P,~F,~H,~Reader,~View,~Delta,~Args,~Declaration,~Failure,~Output,~validateFn,~prepareFn,~commitFn,~releaseFn,~Ops,~body,~grant,~sync,~classify)),~initialize,declaration,context,name,RP.access(~Route.Runtime,Mixed.State>,~Reader,~View,~Delta,~validateFn,~prepareFn,~commitFn,~releaseFn,descriptor)) 321 322 def run_registered_mixed(~S:Data,~C:Type,~R:Type,~P:Data,~F:Type,~H:Type, 323 ~Reader:Type,~View:Data,~Delta:Type,~Args:Type,~Declaration:Type,~Failure:Data,~Output:Type, 324 ~validateFn:Route.Runtime,Mixed.State> -> Reader -> Route.Runtime,Mixed.State> & (Reader & Bool), 325 ~prepareFn:Route.Runtime,Mixed.State> -> @+cursor:Maybe<&2,Tick.Tick> -> Reader -> Route.Runtime,Mixed.State> & (Reader & (View & Delta)), 326 ~commitFn:Route.Runtime,Mixed.State> -> Reader -> Delta -> @+cursor:Tick.Tick -> Route.Runtime,Mixed.State> & Reader,~releaseFn:Route.Runtime,Mixed.State> -> Reader -> Route.Runtime,Mixed.State>, 327 ~Ops:Type -> Type, 328 ~body:@-K:Type -> @-caps:Ops(K) -> (View & Args) -> K -> K & (Tx.Outcome & Output), 329 ~grant:Ops(Tx.Tx>,Notice.Notice>), 330 ~sync:F -> Nat -> List<&2,P> -> F, 331 ~classify:Notice.Notice -> Maybe>, 332 registry:Sys.Registry,Invocation<(Mixed.State & Nat),Reader,RP.Param,Mixed.State>,Reader,View,Delta,validateFn,prepareFn,commitFn,releaseFn>,Declaration,Args>,Empty,Envelope<(Mixed.State & Nat),Reader,RP.Param,Mixed.State>,Reader,View,Delta,validateFn,prepareFn,commitFn,releaseFn>,Declaration,Failure,Output>,shared_runner(~S,~C,~R,~P,~F,~H,~Reader,~View,~Delta,~Args,~Declaration,~Failure,~Output,~validateFn,~prepareFn,~commitFn,~releaseFn,~Ops,~body,~grant,~sync,~classify)>, 333 context:Route.Runtime,Mixed.State>,reader:Reader,+parameter:RP.Param,Mixed.State>,Reader,View,Delta,validateFn,prepareFn,commitFn,releaseFn>,declaration:Declaration,args:Args) -> Sys.RunResult,Invocation<(Mixed.State & Nat),Reader,RP.Param,Mixed.State>,Reader,View,Delta,validateFn,prepareFn,commitFn,releaseFn>,Declaration,Args>,Empty,Envelope<(Mixed.State & Nat),Reader,RP.Param,Mixed.State>,Reader,View,Delta,validateFn,prepareFn,commitFn,releaseFn>,Declaration,Failure,Output>,shared_runner(~S,~C,~R,~P,~F,~H,~Reader,~View,~Delta,~Args,~Declaration,~Failure,~Output,~validateFn,~prepareFn,~commitFn,~releaseFn,~Ops,~body,~grant,~sync,~classify)>: 334 match context: 335 case Route.Runtime{world,state,tick}:run_registered(~S,~C,~R,~Notice.Notice,~Route.Runtime,Mixed.State>,~(Mixed.State & Nat),~Reader,~View,~Delta,~Args,~Declaration,~Failure,~Output,~validateFn,~prepareFn,~commitFn,~releaseFn,~shared_runner(~S,~C,~R,~P,~F,~H,~Reader,~View,~Delta,~Args,~Declaration,~Failure,~Output,~validateFn,~prepareFn,~commitFn,~releaseFn,~Ops,~body,~grant,~sync,~classify),registry,world,(state,tick),reader,parameter,declaration,args) 336 337 def mixed_envelope_result(~S:Data,~C:Type,~R:Type,~E:Data,~Meta:Type,~Context:Type,~Reader:Type,~Parameter:Type,~Declaration:Type,~Args:Type,~Failure:Data,~Output:Type, 338 ~runFn:W.World -> Invocation -> Sys.Outcome,Empty,Envelope>, 339 ~join:W.World -> Meta -> Context, 340 registry:Sys.Registry,Empty,Envelope,runFn>,world:W.World,envelope:Envelope) -> RunResult,Empty,Envelope,runFn>,Reader,Parameter,Declaration>,Args,Failure,Output>: 341 match envelope: 342 case Envelope{meta,reader,parameter,declaration,completion}: 343 match completion: 344 case CallbackCompleted{output}:RunCompleted{join(world,meta),Provider{registry,reader,parameter,declaration},output} 345 case CallbackFailed{error,output}:RunFailed{join(world,meta),Provider{registry,reader,parameter,declaration},error,output} 346 case CallbackInvalidReader{}:RunInvalidReader{join(world,meta),Provider{registry,reader,parameter,declaration}} 347 348 def mixed_outcome_result(~S:Data,~C:Type,~R:Type,~E:Data,~Meta:Type,~Context:Type,~Reader:Type,~Parameter:Type,~Declaration:Type,~Args:Type,~Failure:Data,~Output:Type, 349 ~runFn:W.World -> Invocation -> Sys.Outcome,Empty,Envelope>, 350 ~join:W.World -> Meta -> Context, 351 registry:Sys.Registry,Empty,Envelope,runFn>,outcome:Sys.Outcome,Empty,Envelope>) -> RunResult,Empty,Envelope,runFn>,Reader,Parameter,Declaration>,Args,Failure,Output>: 352 match outcome: 353 case Sys.Failed{world,error}:Empty.absurd(RunResult,Empty,Envelope,runFn>,Reader,Parameter,Declaration>,Args,Failure,Output>,error) 354 case Sys.Succeeded{world,output}:mixed_envelope_result(~S,~C,~R,~E,~Meta,~Context,~Reader,~Parameter,~Declaration,~Args,~Failure,~Output,~runFn,~join,registry,world,output) 355 356 def mixed_rejected_result(~S:Data,~C:Type,~R:Type,~E:Data,~Meta:Type,~Context:Type,~Reader:Type,~Parameter:Type,~Declaration:Type,~Args:Type,~Failure:Data,~Output:Type, 357 ~runFn:W.World -> Invocation -> Sys.Outcome,Empty,Envelope>, 358 ~join:W.World -> Meta -> Context, 359 registry:Sys.Registry,Empty,Envelope,runFn>,world:W.World,invocation:Invocation) -> RunResult,Empty,Envelope,runFn>,Reader,Parameter,Declaration>,Args,Failure,Output>: 360 match invocation: 361 case Invocation{meta,reader,parameter,declaration,args,queryCursor}:RunRegistrationRejected{join(world,meta),Provider{registry,reader,parameter,declaration},args} 362 363 def mixed_raw_result(~S:Data,~C:Type,~R:Type,~E:Data,~Meta:Type,~Context:Type,~Reader:Type,~Parameter:Type,~Declaration:Type,~Args:Type,~Failure:Data,~Output:Type, 364 ~runFn:W.World -> Invocation -> Sys.Outcome,Empty,Envelope>, 365 ~join:W.World -> Meta -> Context, 366 result:Sys.RunResult,Empty,Envelope,runFn>) -> RunResult,Empty,Envelope,runFn>,Reader,Parameter,Declaration>,Args,Failure,Output>: 367 match result: 368 case Sys.RegistrationRejected{registry,world,args}:mixed_rejected_result(~S,~C,~R,~E,~Meta,~Context,~Reader,~Parameter,~Declaration,~Args,~Failure,~Output,~runFn,~join,registry,world,args) 369 case Sys.Completed{registry,outcome}:mixed_outcome_result(~S,~C,~R,~E,~Meta,~Context,~Reader,~Parameter,~Declaration,~Args,~Failure,~Output,~runFn,~join,registry,outcome) 370 371 def run_mixed(~S:Data,~C:Type,~R:Type,~P:Data,~F:Type,~H:Type, 372 ~Reader:Type,~View:Data,~Delta:Type,~Args:Type,~Declaration:Type,~Failure:Data,~Output:Type, 373 ~validateFn:Route.Runtime,Mixed.State> -> Reader -> Route.Runtime,Mixed.State> & (Reader & Bool), 374 ~prepareFn:Route.Runtime,Mixed.State> -> @+cursor:Maybe<&2,Tick.Tick> -> Reader -> Route.Runtime,Mixed.State> & (Reader & (View & Delta)), 375 ~commitFn:Route.Runtime,Mixed.State> -> Reader -> Delta -> @+cursor:Tick.Tick -> Route.Runtime,Mixed.State> & Reader,~releaseFn:Route.Runtime,Mixed.State> -> Reader -> Route.Runtime,Mixed.State>, 376 ~Ops:Type -> Type, 377 ~body:@-K:Type -> @-caps:Ops(K) -> (View & Args) -> K -> K & (Tx.Outcome & Output), 378 ~grant:Ops(Tx.Tx>,Notice.Notice>), 379 ~sync:F -> Nat -> List<&2,P> -> F, 380 ~classify:Notice.Notice -> Maybe>, 381 provider:Provider,Invocation<(Mixed.State & Nat),Reader,RP.Param,Mixed.State>,Reader,View,Delta,validateFn,prepareFn,commitFn,releaseFn>,Declaration,Args>,Empty,Envelope<(Mixed.State & Nat),Reader,RP.Param,Mixed.State>,Reader,View,Delta,validateFn,prepareFn,commitFn,releaseFn>,Declaration,Failure,Output>,shared_runner(~S,~C,~R,~P,~F,~H,~Reader,~View,~Delta,~Args,~Declaration,~Failure,~Output,~validateFn,~prepareFn,~commitFn,~releaseFn,~Ops,~body,~grant,~sync,~classify)>,Reader,RP.Param,Mixed.State>,Reader,View,Delta,validateFn,prepareFn,commitFn,releaseFn>,Declaration>, 382 context:Route.Runtime,Mixed.State>,args:Args) -> RunResult,Mixed.State>,Provider,Invocation<(Mixed.State & Nat),Reader,RP.Param,Mixed.State>,Reader,View,Delta,validateFn,prepareFn,commitFn,releaseFn>,Declaration,Args>,Empty,Envelope<(Mixed.State & Nat),Reader,RP.Param,Mixed.State>,Reader,View,Delta,validateFn,prepareFn,commitFn,releaseFn>,Declaration,Failure,Output>,shared_runner(~S,~C,~R,~P,~F,~H,~Reader,~View,~Delta,~Args,~Declaration,~Failure,~Output,~validateFn,~prepareFn,~commitFn,~releaseFn,~Ops,~body,~grant,~sync,~classify)>,Reader,RP.Param,Mixed.State>,Reader,View,Delta,validateFn,prepareFn,commitFn,releaseFn>,Declaration>,Args,Failure,Output>: 383 match provider: 384 case Provider{registry,reader,+parameter,declaration}: 385 mixed_raw_result(~S,~C,~R,~Notice.Notice,~(Mixed.State & Nat),~Route.Runtime,Mixed.State>,~Reader,~(RP.Param,Mixed.State>,Reader,View,Delta,validateFn,prepareFn,commitFn,releaseFn>),~Declaration,~Args,~Failure,~Output,~shared_runner(~S,~C,~R,~P,~F,~H,~Reader,~View,~Delta,~Args,~Declaration,~Failure,~Output,~validateFn,~prepareFn,~commitFn,~releaseFn,~Ops,~body,~grant,~sync,~classify),~Mixed.join(~S,~C,~R,~P,~F,~H),run_registered_mixed(~S,~C,~R,~P,~F,~H,~Reader,~View,~Delta,~Args,~Declaration,~Failure,~Output,~validateFn,~prepareFn,~commitFn,~releaseFn,~Ops,~body,~grant,~sync,~classify,registry,context,reader,parameter,declaration,args))