Что значит, что «lift — это почти то же самое, что и map»?

#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 — единственный известный мне язык, который использует такой порядок аргументов: рассмотрим Python map , Haskell fmap , Lisp mapcar … все они в 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 в целом это более абстрактное понятие, связанное с функтором.