我正在写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 naming和it's still ongoing。
问题是,使用“提升”术语是否适合我所描述的功能。
之所以不合适的原因是,提升通常用于描述在函子上的提升,这意味着提升参数类型和结果类型。所以.. A -> B -> C
至F<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”提升功能,命名函数liftA2和liftAp -因此在“ lifting”和“ applicative lift”之间有所区别。您认为合适吗?如果没有,您会建议什么命名?
编辑,以便总结我提议的命名是lift
的{{1}}和A->B->X<C>
的{{1}}(像适用语言)