anchor.diff:             [{FieldName, V}|FVs]
             )).
   
  +%% generate schema for a struct with given data size and fields
   struct_node(Size, Fields) ->
       ?LET(R, struct_ref(range(Size, inf), range(0, inf)),
            #struct{ dsize = R#struct_ref.dsize,
  
positive.code:     ?FORALL(
         {Schema, FVs}, schema_data_fields(),
         begin
             Root = root(Schema),
             Obj = ecapnp_obj:from_ref(Root, Schema),
             lists:foldl(
  
negative.code: %% property types
  %%% ----------------------------------------
  
  %% generate any kind of primitive value that capnp can represent.
  data_value() ->
      union(
        [?LET(B, boolean(), {1, bool, B}),
  