bogdan_uman
@bogdan_uman
шлЫмазл неукЪ-поцЪ

Метод join() функционального программирования?

Господа, подскажите пожалуйста.
Прочитал интересную статью на хабре Борьба с грязными побочными эффектами в чистом фун...

И остался один неведомый вопрос, там пишется про метод join

function Effect(f) {
    return {
        map(g) {
            return Effect(x => g(f(x)));
        },
        runEffects(x) {
            return f(x);
        }
        join(x) {
            return f(x);
        }
    }
}

const userBioHTML = Effect.of(window)
    .map(x => x.myAppConf.selectors['user-bio'])
    .map($)
    .join()
    .map(x => x.innerHTML);


Но он не работает, потому что он должен возвращать объект, в возвращает значение, смотрел оригинал статьи тоже самое. Может автор опечатался?

Вот вроде сделал рабочий вариант, когда join() выполняет все предыдущие функции, и результатом возвращает новый объект Effect уже с готовым значением.

join(x) {
    const j = this.runEffects(x);
    return Effect(() => j);
   }


Но может я что-то недопонял, или как должно быть на самом деле? Спасибо.
  • Вопрос задан
  • 465 просмотров
Пригласить эксперта
Ответы на вопрос 1
@cryogenian
`join` берет эффект вложенный в эффект и возвращает эффект. Так что да, с точки зрения этого кода `runEffects` работает аналогично `join`.

Кстати, `x` там не нужен в аргументах.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы