#scala #map #functional-programming #lifting
#scala #Карта #функциональное программирование #подъем
Вопрос:
Леонардо Борхес написал отличный пост под названием «Функциональная композиция с монадами, Клейзли и функторами».
В нем он комментирует:
Марк указал мне, что lift — это почти то же самое, что и map, но с обратными аргументами.
Это означает, что это:
val f = Functor[Option].lift(parts) compose make
может быть преобразован в:
val g = make(_:Int).map(parts)
Мой вопрос в том, что означает, что «lift — это почти то же самое, что и map»?
Комментарии:
1. Я бы даже скорее сказал, что
map
это просто перевернутоlift
. Scala — единственный известный мне язык, который использует такой порядок аргументов: рассмотрим Pythonmap
, Haskellfmap
, Lispmapcar
… все они вlift
порядке. Вероятно, это связано с тенденцией Scala к инфиксной нотации.
Ответ №1:
Из кода функтора scalaz:
def map[A, B](fa: F[A])(f: A => B): F[B]
def lift[A, B](f: A => B): F[A] => F[B] = map(_)(f)
ПРИМЕЧАНИЕ: lift просто определяется в терминах map (изменение аргументов)
В основном, когда люди начинают с функционального программирования, они знакомятся с map
отображением функции над последовательностью вещей, но map
в целом это более абстрактное понятие, связанное с функтором.