2

我正在编写一个函数式编程库,并试图确定哪个名称最适合一系列函数。

这些函数都接受一个函数并返回另一个函数。返回的函数与输入函数相比具有不同的返回类型,但参数没有改变。

实现是:

  • <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 -> CF<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

我一直在我的库中提供“函子”提升,将函数命名为liftA2liftAp——因此在“提升”和“应用提升”之间有所不同。你觉得这样合适吗?如果没有,你会推荐什么命名?

编辑所以你总结一下我提议的命名是lift为了A->B->X<C>liftA(如应用)F<A>->F<B>->F<C>

4

0 回答 0