class LoggingInit implements Init<M, F> {

  @Nonnull
  @Override
  public First<M, F> init(M model) {
    logger.beforeInit(model);
    First<M, F> result = safeInvokeInit(model);
    logger.afterInit(model, result);
    return result;
  }

    LoggingInit(Init<M, F> actualInit, MobiusLoop.Logger<M, ?, F> logger);

}