anchor.diff:  -type spawn_start_option() :: term().
   -export_type([spawn_start_option/0]).
   
  --type tick_start_option() ::
  -    ({TickId :: term(), TickDuration :: pos_integer()} |
  -     {TickId :: term(), TickDuration :: pos_integer(), TickSettings :: [tick_setting()]}).
  +-type tick_start_option() :: {TickId :: term(), TickDuration :: pos_integer()}.
   -export_type([tick_start_option/0]).
  -
  --type tick_setting() :: skip_missed | dont_skip_missed.
  --export_type([tick_setting/0]).
   
   -ifdef(pre18).
   -type timestamp() :: non_neg_integer().
  
positive.code:           id :: term(),
            duration_ns :: pos_integer(),
            deadline_ns :: timestamp(),
            generation :: non_neg_integer(),
            skip_missed :: boolean()
  }).
  -type tick() :: #tick{}.
  
  
negative.code:            {error, {already_started, pid()}} |
             {error, Reason :: term()}.
  start(Name, Mod, Args, Options) ->
      {TickOptions, GenServerOptions} = split_start_options(Options),
      gen_server:start(Name, ?MODULE, {Mod, Args, TickOptions}, GenServerOptions).
  
  -spec start_link(Mod :: module(), Args :: term(), Options :: [start_option()])
          -> {ok, pid()} |
             {error, {already_started, pid()}} |
             {error, Reason :: term()}.
  start_link(Mod, Args, Options) ->
      {TickOptions, GenServerOptions} = split_start_options(Options),
      gen_server:start_link(?MODULE, {Mod, Args, TickOptions}, GenServerOptions).
  
  -spec start_link(Name :: {local, atom()} | {global, atom()} | {via, atom(), term()},
                   Mod :: module(), Args :: term(), Options :: [start_option()])
  