Простой способ применить список функций к значению

Предположим, у меня есть список функций List[A => B] и нужна функция, которая возвращает List[B] для данного значения типа A:

def foo[A, B](fs: List[A => B]): A => List[B] = a => fs.map(_.apply(a))

Есть ли что-нибудь попроще (может быть, с cats) способ написать List[A => B] => A => List[B]?

2 ответа

Решение

Как отмечает @Oleg, вы можете использовать Applicative чтобы сгенерировать функцию:

import cats.implicits._

def foo[A, B](fs: List[A => B]): A => List[B] = a => fs ap List(a)

Хотя я не думаю, что это имеет большое значение в данном конкретном случае.

Подписьf (a -> b) -> a -> f bпредлагает использоватьflap(из Хаскеля).

Начиная с 2.9.0 вы можете использовать его аналог в Кошках по имениmapApply.

      import cats.implicits._

def foo[A, B](fs: List[A => B]): A => List[B] = a => fs.mapApply(a)
Другие вопросы по тегам