docs: function fetchSystemByTypeCycle(sources) {
    const accessToken$ = accessTokenSelector$(sources.STATE);
    const type$ = sources.ACTION.filter(
      action => action.type === FETCH_SYSTEM_BY_TYPE,
    )
      .pluck('payload')
      .distinctUntilChanged();
  
    const request$ = type$.combineLatest(accessToken$, (type, accessToken) => ({
      url: `/api/service/${type}`,
      method: 'GET',
      headers: { Authorization: `Bearer ${accessToken}` },
      category: FETCH_SYSTEM_BY_TYPE,
    }));
  
    const successRes$ = sources.HTTP.select(FETCH_SYSTEM_BY_TYPE).switchMap(
      success,
    );
  
    // Remind: api response with type(settingId) will be better.
    const responseType$ = successRes$
      .pluck('request', 'url')
      .map(R.pipe(R.match(/[\w]+$/), R.head));
  
    const action$ = Observable.from([
      request$.mapTo(uiActions.setLoading()),
      successRes$
        .pluck('body', 'data')
        .map(data => JSON.stringify(data, null, '\t'))
        .zip(responseType$, (data, type) => ({
          data,
          type,
        }))
        .map(setSystemByType),
      successRes$.mapTo(uiActions.setLoaded()),
    ]).mergeAll();
  
    return {
      ACTION: action$,
      HTTP: request$,
    };
  }