我正在编写一个函数式编程库,并试图确定哪个名称最适合一系列函数。
这些函数都接受一个函数并返回另一个函数。返回的函数与输入函数相比具有不同的返回类型,但参数没有改变。
实现是:
<parameters> -> T|undefined
=><parameters> -> Option<T>
apidoc<parameters> -> R|undefined <may throw>
=><parameters -> Either<L,R>
apidoc<parameters> -> Promise<T>
=><parameters> -> Future<T>
(计划添加)
已经有一些关于命名的讨论,并且仍在我的图书馆的存储库中进行。
问题是使用“提升”术语是否适合我所描述的功能。
它可能不合适的原因是提升最常用于描述对函子的提升,这意味着提升参数类型和结果类型。所以..A -> B -> C
到F<A> -> F<B> -> F<C>
. 这不是这些函数的作用。
但是,我看到 scala 完全按照我的方式使用“提升”术语:
我想看看他们在 scala-land 中是如何命名的……结果……如果我理解正确,他们说这是提升: 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 正在谈论“提升类型”和“未提升类型”,这表明该术语以更宽松的方式使用。
另一方面,这个说提升只是“函子提升”: https ://stackoverflow.com/a/43596202/516188
我一直在我的库中提供“函子”提升,将函数命名为liftA2和liftAp——因此在“提升”和“应用提升”之间有所不同。你觉得这样合适吗?如果没有,你会推荐什么命名?
编辑所以你总结一下我提议的命名是lift
为了A->B->X<C>
和liftA
(如应用)F<A>->F<B>->F<C>