la terminologie de la programmation fonctionnelle: levage vs foncteur / levage applicative

voix
0

J'écris une bibliothèque de programmation fonctionnelle et je suis en train de décider quel nom est le mieux pour une série de fonctions.

Les fonctions prennent toutes une fonction et retourner une autre fonction. La fonction de retour a un autre type de rendement par rapport à la fonction d'entrée, mais les paramètres ne sont pas modifiés.

Implémentations sont:

  • <parameters> -> T|undefined=> <parameters> -> Option<T> Apidoc
  • <parameters> -> R|undefined <may throw>=> <parameters -> Either<L,R> Apidoc
  • <parameters> -> Promise<T>=> <parameters> -> Future<T>(Planification à ajouter)

Il y a eu des discussions sur les noms et il est toujours en cours dans le dépôt de ma bibliothèque.

La question est de savoir si l'utilisation de la terminologie «lift est approprié pour les fonctions que je viens de décrire.

La raison pour laquelle il ne peut pas être approprié est que la levée est le plus souvent utilisé pour décrire la levée sur un foncteur, ce qui signifie soulever les deux types de paramètres et le type de résultat. Alors .. A -> B -> Cà F<A> -> F<B> -> F<C>. Ce qui est pas ce que ces fonctions font.

Cependant, je vois que scala utilise la terminologie de « lifting » exactement de la façon dont je:

Je voulais voir comment ils nomment cela dans scala-terre .. et il se trouve ... ils disent qu'il est levée si je comprends bien: Qu'est - ce que « lifting » à Scala?

Rappelez-vous une fonction partielle [A, B] est une fonction définie par un sous-ensemble du domaine A (tel que spécifié par la méthode isDefinedAt). Vous pouvez ascenseur une fonction partielle [A, B] en fonction [A, Option [B]]. C'est une fonction définie sur l'ensemble de A, mais dont les valeurs sont de type Option [B]

D'autre part la levée lorsque tous les paramètres sont soulevés en plus le résultat, disent-ils:

« Lift » la fonction A => B dans le domaine du foncteur. [..] « ​​levage dans un foncteur »

Il est là => https://www.scala-lang.org/api/current/scala/PartialFunction.html#lift:A=>Option[B]

Donc, cela signifierait levage est un concept général, dont la levée de foncteur est seulement une sous-catégorie. En outre, haskell parle « types » et « levé types » non relevé, ce qui suggère que la terminologie est utilisée de manière plus lâche.

D'autre part celui - ci dit levage est que « la levée de foncteur »: https://stackoverflow.com/a/43596202/516188

J'offre la levée « foncteur » dans ma bibliothèque, en nommant les fonctions liftA2 et liftAp - afin de faire une différence entre « levage » et « levage applicative ». Pensez - vous que ce soit approprié? Sinon, quelle appellation recommanderiez - vous?

Créé 02/09/2018 à 05:32
source utilisateur
Dans d'autres langues...                            

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more