anchor.diff:  %%--------------------------------------------------------------------
   handle_call({add, TaskName, Schedule, Detail}, _From, State = #state{ tasks = Tasks }) ->
       %% TODO: receive a message from task worker
  -    case dict:find(TaskName, Tasks) of
  -        error ->
  -            NewTasks = dict:append(TaskName, {Schedule, Detail}, Tasks),
  -            io:format("adds a task: {~p, ~p, ~p}", [TaskName, Schedule, Detail]),
  -            {reply, ok, State#state{ tasks = NewTasks }};
  -        _ ->
  -            io:format("already task is registered: {~p, ~p, ~p}", [TaskName, Schedule, Detail]),
  -            {reply, {already_registered, TaskName}, State}
  -    end;
  +    NewTasks = dict:store(TaskName, {Schedule, Detail}, Tasks),
  +    io:format("adds a task: {~p, ~p, ~p}", [TaskName, Schedule, Detail]),
  +    {reply, ok, State#state{ tasks = NewTasks }};
   handle_call({cancel, TaskName}, _From, State) ->
       %% TODO: receive a message from task worker
       NewTasks = dict:erase(TaskName, State#state.tasks),
  
positive.code: -define(SERVER, ?MODULE).
  
  -record(state, {
            nodes = [{node(), alive}] :: [{node(), term()}],
            tasks = dict:new() :: dict:dict(task_name(), {schedule(), detail()})
           }).
  
  
negative.code: %% TODO: specifies the proprietary schedule time format.
  -type schedule() :: term().
  -type detail() :: binary().
  -type node_status() :: joined | lost | joinning | leaving.
  
  %%%===================================================================
  %%% API
  