私は関数型プログラミング ライブラリを作成しており、一連の関数に最適な名前を決定しようとしています。
関数はすべて関数を取り、別の関数を返します。返された関数の戻り値の型は入力関数とは異なりますが、パラメーターは変更されていません。
実装は次のとおりです。
<parameters> -> T|undefined
=><parameters> -> Option<T>
アピドック<parameters> -> R|undefined <may throw>
=><parameters -> Either<L,R>
アピドック<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>