函数式程序设计术语:提升vs函子/应用提升

时间:2018-09-02 05:32:44

标签: functional-programming category-theory lifting

我正在写a functional programming library,并试图确定最适合一系列功能的名称。

所有函数都接受一个函数并返回另一个函数。与输入函数相比,返回的函数具有不同的返回类型,但是参数不会更改。

实现方式是:

  • <parameters> -> T|undefined => <parameters> -> Option<T> apidoc
  • <parameters> -> R|undefined <may throw> => <parameters -> Either<L,R> apidoc
  • <parameters> -> Promise<T> => <parameters> -> Future<T>(计划添加)

我的图书馆资料库中有has been some discussion about namingit's still ongoing

问题是,使用“提升”术语是否适合我所描述的功能。

之所以不合适的原因是,提升通常用于描述在函子上的提升,这意味着提升参数类型和结果类型。所以.. A -> B -> CF<A> -> F<B> -> F<C>。这些功能不能做什么。

但是我看到scala完全按照我的方式使用了“提升”术语:

我想看看他们在斯卡拉地区如何命名。事实证明...如果我理解正确,他们会说这很有趣: What is "lifting" in Scala?

  

记住PartialFunction [A,B]是为域A的某些子集定义的函数(由isDefinedAt方法指定)。您可以将PartialFunction [A,B]提升为Function [A,Option [B]]。也就是说,在整个A上定义的函数,但其​​值的类型为Option [B]

另一方面,当除结果以外的所有参数都被提升时,他们说:

  

将函数A => B“提升”到函子的域中。   [..]   “举起函子”

在那里=> https://www.scala-lang.org/api/current/scala/PartialFunction.html#lift:A=%3EOption[B]

因此,这意味着提升是一个通用概念,其中函子提升只是一个子类别。同样,haskell在谈论“提升类型”和“未提升类型”,这表明该术语的使用更为宽松。

另一方面,这个人说举起只是“ functor举起”: https://stackoverflow.com/a/43596202/516188

我一直在我的库中提供“ functor”提升功能,命名函数liftA2liftAp -因此在“ lifting”和“ applicative lift”之间有所区别。您认为合适吗?如果没有,您会建议什么命名?

编辑,以便总结我提议的命名是lift的{​​{1}}和A->B->X<C>的{​​{1}}(像适用语言)

0 个答案:

没有答案