anchor.diff:  -type link_name() :: atom() | binary().
   -type link_spec() :: {link_name(), link_target()}.
   -type normalized_link_spec() :: {link_name(), normalized_link_target()}.
  +
   
   -export_type([link_target/0, link_name/0, link_spec/0, normalized_link_spec/0, normalized_link_target/0]).
   
  
positive.code:     delete_links(Key, ModelName, [LinkName]).
  
  
  -spec fetch_link(document(), link_name()) -> {ok, normalized_link_target()} | generic_error().
  fetch_link(#document{key = Key} = Doc, LinkName) ->
      fetch_link(Key, model_name(Doc), LinkName).
  
  -spec fetch_link(key(), model_behaviour:model_type(), link_name()) ->
      {ok, normalized_link_target()} | generic_error().
  fetch_link(Key, ModelName, LinkName) ->
      _ModelConfig = ModelName:model_init(),
      exec_driver(ModelName, ?PERSISTENCE_DRIVER, fetch_link, [Key, LinkName]).
  
  -spec fetch_link_target(document(), link_name()) -> {ok, document()} | generic_error().
  fetch_link_target(#document{key = Key} = Doc, LinkName) ->
      fetch_link_target(Key, model_name(Doc), LinkName).
  
  -spec fetch_link_target(key(), model_behaviour:model_type(), link_name()) ->
      {ok, document()} | generic_error().
  fetch_link_target(Key, ModelName, LinkName) ->
  
negative.code: -type update_error() :: not_found_error(term()) | generic_error().
  -type create_error() :: generic_error() | {error, already_exists}.
  -type get_error() :: not_found_error(term()) | generic_error().
  -type link_error() :: generic_error() | {error, link_not_found}.
  
  -export_type([generic_error/0, not_found_error/1, update_error/0, create_error/0, get_error/0, link_error/0]).
  
  %% API utility types
  -type store_level() :: disk_only | local_only | global_only | locally_cached | globally_cached.
  