1 import Base 2 import ./ordinary_optional_resource_declaration.bend as D 3 import ./ordinary_resource_field_system.bend as Field 4 import ./world.bend as W 5 import ./transaction.bend as T 6 import ./check.bend as K 7 import ./system.bend as Sys 8 import ./ordinary_query_declaration.bend as Q 9 # Existing transaction body is reached only after the declared slot preflight. 10 def preflighted(~S:Data,~C:Type,~R:Type,~E:Data,~Ops:Type -> Type,~Args:Data,~Out:Type,~Value:Data,~declaration:D.Declaration,~body:@-H:Type -> @-caps:Ops(H) -> Args -> H -> H & (T.Outcome & Out),args:Args,result:W.World & List<&2,String>) -> Sys.Outcome,K.Error,Out>: 11 match result: 12 case (world,[]):Field.runner(~S,~C,~R,~E,~Ops,~Args,~K.Error,~Out,~D.ordinary(~S,~C,~R,~E,~Ops,~Value,declaration),~body,world,args) 13 case (world,missing):Sys.Failed{world,K.MissingRuntimeRequirements{missing}} 14 def runner(~S:Data,~C:Type,~R:Type,~E:Data,~Ops:Type -> Type,~Args:Data,~Out:Type,~Value:Data,~declaration:D.Declaration,~body:@-H:Type -> @-caps:Ops(H) -> Args -> H -> H & (T.Outcome & Out),world:W.World,args:Args) -> Sys.Outcome,K.Error,Out>: 15 preflighted(~S,~C,~R,~E,~Ops,~Args,~Out,~Value,~declaration,~body,args,D.preflight(~S,~C,~R,~E,~Ops,~Value,declaration,world)) 16 def registered(~S:Data,~C:Type,~R:Type,~E:Data,~Args:Data,~Out:Type,~run:W.World -> Args -> Sys.Outcome,K.Error,Out>,~clauses:List<&2,Q.Clause>,result:Sys.RegistrationResult) -> Field.Defined,Sys.Registry,clauses>: 17 match result: 18 case Sys.RegistrationFailed{world}:Field.Rejected{world} 19 case Sys.Registered{world,registry}:Field.Defined{world,Field.Owner{registry}} 20 def define(~S:Data,~C:Type,~R:Type,~E:Data,~Ops:Type -> Type,~Args:Data,~Out:Type,~Value:Data,~declaration:D.Declaration,~body:@-H:Type -> @-caps:Ops(H) -> Args -> H -> H & (T.Outcome & Out),world:W.World,name:String) -> Field.Defined,Sys.Registry,Field.clauses(~S,~T.Tx,E>,~Ops(T.Tx,E>),D.ordinary(~S,~C,~R,~E,~Ops,~Value,declaration))>: 21 registered(~S,~C,~R,~E,~Args,~Out,~runner(~S,~C,~R,~E,~Ops,~Args,~Out,~Value,~declaration,~body),~Field.clauses(~S,~T.Tx,E>,~Ops(T.Tx,E>),D.ordinary(~S,~C,~R,~E,~Ops,~Value,declaration)),Sys.register(~S,~C,~R,~E,~Args,~K.Error,~Out,~runner(~S,~C,~R,~E,~Ops,~Args,~Out,~Value,~declaration,~body),world,name,Field.access(~S,Field.clauses(~S,~T.Tx,E>,~Ops(T.Tx,E>),D.ordinary(~S,~C,~R,~E,~Ops,~Value,declaration)))))