1 import Base 2 import ./ordinary_recovery_declaration.bend as D 3 import ./ordinary_recovery_system.bend as System 4 import ./recovery_use.bend as Use 5 import ./world.bend as W 6 import ./system.bend as Sys 7 import ./owner_product.bend as Product 8 import ./transaction.bend as T 9 import ./ordinary_query_declaration.bend as Query 10 import ./ordinary_app_composer.bend as Build 11 import ./ordinary_app_records.bend as Pair 12 import ./ordinary_app_recipe.bend as Tree 13 import ./ordinary_app_observation_data.bend as DTO 14 import ./ordinary_app_registration_fields.bend as Fields 15 16 def use(target:Use.Target) -> List<&2,Fields.DeclaredUse>: 17 match target: 18 case Use.Component{key}:[Fields.DeclaredUse{Fields.ComponentUse{},Fields.QuerySource{},key,Query.Write{}}] 19 case Use.Resource{key}:[Fields.DeclaredUse{Fields.ResourceUse{},Fields.QuerySource{},key,Query.Write{}}] 20 case Use.Capture{}:[] 21 def uses(values:List<&2,Use.Use>) -> List<&2,Fields.DeclaredUse>: 22 match values: 23 case []:[] 24 case Use.Use{target,Use.Write{}} <> rest:List.append(&2,Fields.DeclaredUse,use(target),uses(rest)) 25 def described(value:Use.Description) -> List<&2,Fields.DeclaredUse>: 26 match value: 27 case Use.Description{values,_}:uses(values) 28 def fold(~S:Data,~C:Type,~R:Type,~E:Data,~Capture:Type,~Recovery:Type,~Ops:Type -> Type,~Args:Type,~Error:Data,~Out:Type,~builder:D.Builder(~Product.Owner,Capture>,~Recovery,~Ops),~declaration:D.Declaration,Capture>,Recovery,Ops,builder>,~body:@-H:Type -> @-caps:Ops(H) -> Args -> H -> H & (T.Outcome & Out),owner:System.Owned(~S,~C,~R,~E,~Capture,~Recovery,~Ops,~Args,~Error,~Out,~builder,~declaration,~body)) -> System.Owned(~S,~C,~R,~E,~Capture,~Recovery,~Ops,~Args,~Error,~Out,~builder,~declaration,~body) & List<&2,Fields.Fields>: 29 match owner: 30 case System.Owner{Sys.Registry{+ns,+id,+name,+access,+cursor},capture}:(System.Owner{Sys.Registry{ns,id,name,access,cursor},capture},[Fields.Fields{ns,id,name,access,cursor,name,[],Fields.MixedKind{described(D.description(~S,~Product.Owner,Capture>,~Recovery,~Ops,~builder,declaration))}}]) 31 def After(~S:Data,~C:Type,~R:Type,~E:Data,~Capture:Type,~Recovery:Type,~Ops:Type -> Type,~Args:Type,~Error:Data,~Out:Type,~builder:D.Builder(~Product.Owner,Capture>,~Recovery,~Ops),~declaration:D.Declaration,Capture>,Recovery,Ops,builder>,~body:@-H:Type -> @-caps:Ops(H) -> Args -> H -> H & (T.Outcome & Out),~Previous:Type,~Rows:Data,~observe:W.World -> W.World & DTO.Observation,~previousFold:Previous -> Previous & List<&2,Fields.Fields>) -> Type:Build.Registered,Previous & System.Owned(~S,~C,~R,~E,~Capture,~Recovery,~Ops,~Args,~Error,~Out,~builder,~declaration,~body),Rows,observe,Pair.fold_pair(~S,~Previous,~System.Owned(~S,~C,~R,~E,~Capture,~Recovery,~Ops,~Args,~Error,~Out,~builder,~declaration,~body),~previousFold,~fold(~S,~C,~R,~E,~Capture,~Recovery,~Ops,~Args,~Error,~Out,~builder,~declaration,~body))> 32 type Appended is Type: 33 Appended{app:After} 34 AppendRejected{app:Before,capture:Capture} 35 def defined(~S:Data,~C:Type,~R:Type,~E:Data,~Capture:Type,~Recovery:Type,~Ops:Type -> Type,~Args:Type,~Error:Data,~Out:Type,~builder:D.Builder(~Product.Owner,Capture>,~Recovery,~Ops),~declaration:D.Declaration,Capture>,Recovery,Ops,builder>,~body:@-H:Type -> @-caps:Ops(H) -> Args -> H -> H & (T.Outcome & Out),~Previous:Type,~Rows:Data,~observe:W.World -> W.World & DTO.Observation,~previousFold:Previous -> Previous & List<&2,Fields.Fields>,previous:Previous,recipe:Tree.Recipe,Rows,observe>,debug:Bool,result:System.Defined,System.Owned(~S,~C,~R,~E,~Capture,~Recovery,~Ops,~Args,~Error,~Out,~builder,~declaration,~body),Capture>) -> Appended,Previous,Rows,observe,previousFold>,Build.Registered,Previous & System.Owned(~S,~C,~R,~E,~Capture,~Recovery,~Ops,~Args,~Error,~Out,~builder,~declaration,~body),Rows,observe,Pair.fold_pair(~S,~Previous,~System.Owned(~S,~C,~R,~E,~Capture,~Recovery,~Ops,~Args,~Error,~Out,~builder,~declaration,~body),~previousFold,~fold(~S,~C,~R,~E,~Capture,~Recovery,~Ops,~Args,~Error,~Out,~builder,~declaration,~body))>,Capture>: 36 match result: 37 case System.Defined{world,owner}:Appended{Build.Registered{world,(previous,owner),recipe,debug}} 38 case System.DefinitionRejected{world,capture}:AppendRejected{Build.Registered{world,previous,recipe,debug},capture} 39 def admitted(~S:Data,~C:Type,~R:Type,~E:Data,~Capture:Type,~Recovery:Type,~Ops:Type -> Type,~Args:Type,~Error:Data,~Out:Type,~builder:D.Builder(~Product.Owner,Capture>,~Recovery,~Ops),~declaration:D.Declaration,Capture>,Recovery,Ops,builder>,~body:@-H:Type -> @-caps:Ops(H) -> Args -> H -> H & (T.Outcome & Out),~Previous:Type,~Rows:Data,~observe:W.World -> W.World & DTO.Observation,~previousFold:Previous -> Previous & List<&2,Fields.Fields>,allowed:Bool,app:Build.Registered,Previous,Rows,observe,previousFold>,name:String,capture:Capture) -> Appended,Previous,Rows,observe,previousFold>,Build.Registered,Previous & System.Owned(~S,~C,~R,~E,~Capture,~Recovery,~Ops,~Args,~Error,~Out,~builder,~declaration,~body),Rows,observe,Pair.fold_pair(~S,~Previous,~System.Owned(~S,~C,~R,~E,~Capture,~Recovery,~Ops,~Args,~Error,~Out,~builder,~declaration,~body),~previousFold,~fold(~S,~C,~R,~E,~Capture,~Recovery,~Ops,~Args,~Error,~Out,~builder,~declaration,~body))>,Capture>: 40 match allowed app: 41 case False{} app:AppendRejected{app,capture} 42 case True{} Build.Registered{world,previous,recipe,debug}:defined(~S,~C,~R,~E,~Capture,~Recovery,~Ops,~Args,~Error,~Out,~builder,~declaration,~body,~Previous,~Rows,~observe,~previousFold,previous,recipe,debug,System.define(~S,~C,~R,~E,~Capture,~Recovery,~Ops,~Args,~Error,~Out,~builder,~declaration,~body,world,name,capture)) 43 def register(~S:Data,~C:Type,~R:Type,~E:Data,~Capture:Type,~Recovery:Type,~Ops:Type -> Type,~Args:Type,~Error:Data,~Out:Type,~builder:D.Builder(~Product.Owner,Capture>,~Recovery,~Ops),~declaration:D.Declaration,Capture>,Recovery,Ops,builder>,~body:@-H:Type -> @-caps:Ops(H) -> Args -> H -> H & (T.Outcome & Out),~Previous:Type,~Rows:Data,~observe:W.World -> W.World & DTO.Observation,~previousFold:Previous -> Previous & List<&2,Fields.Fields>,app:Build.Registered,Previous,Rows,observe,previousFold>,name:String,capture:Capture) -> Appended,Previous,Rows,observe,previousFold>,Build.Registered,Previous & System.Owned(~S,~C,~R,~E,~Capture,~Recovery,~Ops,~Args,~Error,~Out,~builder,~declaration,~body),Rows,observe,Pair.fold_pair(~S,~Previous,~System.Owned(~S,~C,~R,~E,~Capture,~Recovery,~Ops,~Args,~Error,~Out,~builder,~declaration,~body),~previousFold,~fold(~S,~C,~R,~E,~Capture,~Recovery,~Ops,~Args,~Error,~Out,~builder,~declaration,~body))>,Capture>: 44 admitted(~S,~C,~R,~E,~Capture,~Recovery,~Ops,~Args,~Error,~Out,~builder,~declaration,~body,~Previous,~Rows,~observe,~previousFold,Use.complete(D.description(~S,~Product.Owner,Capture>,~Recovery,~Ops,~builder,declaration)),app,name,capture) 45 type Run is Type: 46 Completed{app:After,outcome:T.Outcome,output:Out,recovery:Recovery} 47 RegistrationRejected{app:After,args:Args} 48 TransportFailed{app:Before} 49 def completed(~S:Data,~C:Type,~R:Type,~E:Data,~Capture:Type,~Recovery:Type,~Ops:Type -> Type,~Args:Type,~Error:Data,~Out:Type,~builder:D.Builder(~Product.Owner,Capture>,~Recovery,~Ops),~declaration:D.Declaration,Capture>,Recovery,Ops,builder>,~body:@-H:Type -> @-caps:Ops(H) -> Args -> H -> H & (T.Outcome & Out),~Previous:Type,~Rows:Data,~observe:W.World -> W.World & DTO.Observation,~previousFold:Previous -> Previous & List<&2,Fields.Fields>,previous:Previous,recipe:Tree.Recipe,Rows,observe>,debug:Bool,result:System.Run,System.Owned(~S,~C,~R,~E,~Capture,~Recovery,~Ops,~Args,~Error,~Out,~builder,~declaration,~body),Args,Error,Out,Recovery>) -> Run,Previous,Rows,observe,previousFold>,Build.Registered,Previous & System.Owned(~S,~C,~R,~E,~Capture,~Recovery,~Ops,~Args,~Error,~Out,~builder,~declaration,~body),Rows,observe,Pair.fold_pair(~S,~Previous,~System.Owned(~S,~C,~R,~E,~Capture,~Recovery,~Ops,~Args,~Error,~Out,~builder,~declaration,~body),~previousFold,~fold(~S,~C,~R,~E,~Capture,~Recovery,~Ops,~Args,~Error,~Out,~builder,~declaration,~body))>,Args,Error,Out,Recovery>: 50 match result: 51 case System.Completed{world,owner,outcome,output,recovery}:Completed{Build.Registered{world,(previous,owner),recipe,debug},outcome,output,recovery} 52 case System.RegistrationRejected{world,owner,args}:RegistrationRejected{Build.Registered{world,(previous,owner),recipe,debug},args} 53 case System.TransportFailed{world}:TransportFailed{Build.Registered{world,previous,recipe,debug}} 54 def run(~S:Data,~C:Type,~R:Type,~E:Data,~Capture:Type,~Recovery:Type,~Ops:Type -> Type,~Args:Type,~Error:Data,~Out:Type,~builder:D.Builder(~Product.Owner,Capture>,~Recovery,~Ops),~declaration:D.Declaration,Capture>,Recovery,Ops,builder>,~body:@-H:Type -> @-caps:Ops(H) -> Args -> H -> H & (T.Outcome & Out),~Previous:Type,~Rows:Data,~observe:W.World -> W.World & DTO.Observation,~previousFold:Previous -> Previous & List<&2,Fields.Fields>,app:Build.Registered,Previous & System.Owned(~S,~C,~R,~E,~Capture,~Recovery,~Ops,~Args,~Error,~Out,~builder,~declaration,~body),Rows,observe,Pair.fold_pair(~S,~Previous,~System.Owned(~S,~C,~R,~E,~Capture,~Recovery,~Ops,~Args,~Error,~Out,~builder,~declaration,~body),~previousFold,~fold(~S,~C,~R,~E,~Capture,~Recovery,~Ops,~Args,~Error,~Out,~builder,~declaration,~body))>,args:Args) -> Run,Previous,Rows,observe,previousFold>,Build.Registered,Previous & System.Owned(~S,~C,~R,~E,~Capture,~Recovery,~Ops,~Args,~Error,~Out,~builder,~declaration,~body),Rows,observe,Pair.fold_pair(~S,~Previous,~System.Owned(~S,~C,~R,~E,~Capture,~Recovery,~Ops,~Args,~Error,~Out,~builder,~declaration,~body),~previousFold,~fold(~S,~C,~R,~E,~Capture,~Recovery,~Ops,~Args,~Error,~Out,~builder,~declaration,~body))>,Args,Error,Out,Recovery>: 55 match app: 56 case Build.Registered{world,(previous,owner),recipe,debug}:completed(~S,~C,~R,~E,~Capture,~Recovery,~Ops,~Args,~Error,~Out,~builder,~declaration,~body,~Previous,~Rows,~observe,~previousFold,previous,recipe,debug,System.run(~S,~C,~R,~E,~Capture,~Recovery,~Ops,~Args,~Error,~Out,~builder,~declaration,~body,owner,world,args))