терминология функционального программирования: подъем против функтора / аппликативный подъем - PullRequest
0 голосов
/ 02 сентября 2018

Я пишу функциональную библиотеку программирования и пытаюсь решить, какое имя лучше всего подходит для ряда функций.

Все функции принимают функцию и возвращают другую функцию. Возвращенная функция имеет другой тип возврата по сравнению с функцией ввода, но параметры не изменены.

Реализации:

  • <parameters> -> T|undefined => <parameters> -> Option<T> apidoc
  • <parameters> -> R|undefined <may throw> => <parameters -> Either<L,R> apidoc
  • <parameters> -> Promise<T> => <parameters> -> Future<T> (планируется добавить)

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *1030* * * * * * * * * * * * * * * .

Вопрос в том, подходит ли использование терминологии 'lift' для функций, которые я описал.

Причина, по которой это может быть неуместно, заключается в том, что подъем чаще всего используется для описания подъема над функтором, что означает поднятие обоих типов параметров и типа результата. Итак .. A -> B -> C до F<A> -> F<B> -> F<C>. Это не то, что делают эти функции.

Однако я вижу, что scala использует терминологию «подъема» именно так, как я это делал:

Я хотел посмотреть, как они называют это на земле Скала ... и получается ... они говорят, что это поднимает, если я правильно понимаю:

Что такое "подъем" в Scala?

Помните, что PartialFunction [A, B] - это функция, определенная для некоторого подмножества домена A (как определено методом isDefinedAt). Вы можете «поднять» PartialFunction [A, B] в функцию [A, Option [B]]. То есть функция, определенная для всего A, но значения которой имеют тип Option [B]

С другой стороны, для поднятия, когда все параметры подняты, кроме результата, они говорят:

«поднять» функцию A => B в область функтора. [..] "подъем в функтор"

Это там => https://www.scala -lang.org / апи / ток / Скала / PartialFunction.html # лифт: A =% 3EOption [B]

Таким образом, это означает, что подъем - это общая концепция, из которой подъем функтора - это только подкатегория. Кроме того, haskell говорит о «поднятых типах» и «неснятых типах», предполагая, что терминология используется более свободно.

С другой стороны, этот говорит, что подъем - это только «подъем функтора»: https://stackoverflow.com/a/43596202/516188

Я предлагал «функторное» поднятие в моей библиотеке, называя функции liftA2 и liftAp - таким образом, существует разница между «подъемом» и «аппликативным подъемом». Как вы думаете, это уместно? Если нет, какое наименование вы бы порекомендовали?

РЕДАКТИРОВАТЬ, так что в итоге мои предложенные названия будут lift для A->B->X<C> и liftA (как аппликатив) для F<A>->F<B>->F<C>

...