anchor.diff:  
   %%%-----------------------------------------------------------------------------
   %% @doc Redirects user
  --spec redirect(URL :: binary(),
  +-spec redirect(URL :: binary()|string(),
                  Req0 :: cowboy_req:req(),
  -               State :: macaba_web:html_state()) -> handler_return().
  +               State :: macaba_web:html_state()) ->
  +                  macaba_web:handler_return().
   
   redirect(URL, Req0, State=#mcb_html_state{}) ->
     {ok, Req} = cowboy_req:reply(
  
positive.code:         ThreadId :: binary(),
          PostId :: binary(),
          Req0 :: cowboy_req:req(),
          State :: macaba_web:html_state()) -> handler_return().
  
  redirect_to_thread_and_post(BoardId, ThreadId, PostId, Req, State) ->
     redirect("/board/" ++ macaba:as_string(BoardId) ++ "/thread/"
  
negative.code: %%%------------------------------------------------------------------------
  %% @doc Runs list of functions passing opaque state through them and stopping
  %% if any of functions returns error.
  -type handler_fun_t() :: fun((macaba_web:handler_return()) ->
                                  macaba_web:chain_return()).
  -spec chain_run([handler_fun_t()],
                  State :: any()) -> macaba_web:chain_return().
  
  chain_run([], State) -> {ok, State};
  chain_run([F | Tail], State) ->
  