問題タブ [bifunctor]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - BiFunction 参照は、関数型インターフェイスを期待するメソッドに渡すことができますか?
私はいつも Java 6 しか使っていませんでしたが、今は Java 8 の新機能を学ぶために追いついています 。 /240166764?pgno=2
そしてそれは言います:
Java API は、java.util.function パッケージでいくつかの汎用機能インターフェースを定義します。インターフェイスの 1 つである BiFunction は、パラメーターの型が T と U で、戻り値の型が R の関数を記述します。文字列比較ラムダをその型の変数に保存できます。
ただし、それはソートには役立ちません。BiFunction を必要とする Arrays.sort メソッドはありません。以前に関数型プログラミング言語を使用したことがある場合は、これが興味深いことに気付くかもしれません。しかし、Java プログラマーにとってはごく自然なことです。Comparator などのインターフェイスには、指定されたパラメーターと戻り値の型を持つメソッドだけでなく、特定の目的があります。Java 8 はこのフレーバーを保持しています。ラムダ式で何かをしたい場合でも、式の目的を念頭に置いて、そのための特定の関数インターフェイスを用意する必要があります。
ただし、このスレッドを見ると: How do you assign a lambda to a variable in Java 8?
そこの質問への回答は、引用された段落があなたができないと言っていることを正確に行うことを示唆しています.
では、この記事の情報は間違っているのでしょうか、それともここで何かを読み間違えているのでしょうか?
ありがとう!
haskell - Iso を Bifanctor の最初の引数に持ち上げる
Control.Lens.Iso
Iso
s を有用な抽象化のさまざまな型引数に持ち上げるための多くの素晴らしい関数が含まれています。例えば:
mapping
任意Functor
の scontramapping
Contravariant
ファンクタ用dimapping
、lmapping
およびsrmapping
_Profunctor
bimapping
のためBifunctor
の
Iso
anを a のfirst
引数に持ち上げる関数を探していますBifunctor
が、そこにはないようです。私は現在それを次のように定義しています:
この機能はすでにどこかに存在していますか、それともそれとbimapping p (iso id id)
同じくらい優れていますか?
haskell - bittraverse に相当するレンズは何ですか?
この機能と同様のことができるレンズを作成する方法はありますか?
現時点で満足させようとしている特定のタイプは次のとおりです。
私はレンズを使って実験してきましたがtraverseOf
、both
タイプを並べることができないようです。
scala - Hom Functor の反変性と Scala の Function1 の間に何らかの関係はありますか?
Hom 関手 は、最初のHom(-,-)
引数で反変であり、2 番目の引数で共変です。
この事実は、Scala のFunction1[-T1, +R]が同じプロパティを持っている理由の別の説明を何らかの方法で提供できますか?
たとえばここでこの主張がなされているのを見たことがありますが、2つの概念の関係が説明されるはずだった時点で、あまりにも多くの手を振って私を吹き飛ばしました.
scala - Bifanctor のパラメーター化された型エイリアス
私は a を持っていて、Seq[R]
これを a に分割したいのですが、これをコーディングしているときに、seq のタプルにTuple2[Seq[E], Seq[S]]
カスタムを使用できるという事実について考え、演習としてこれをコーディングしようとしました。Bifunctor
これは正常に動作しますが、何らかの理由で、このすべてをコンパイルするためにパラメーター化された型エイリアスを宣言する必要type MyType[E, S] = (Seq[E], Seq[S])
がありました。
[エラー] ... (Seq[E], Seq[S]) は型パラメーターを取りません。予想: 2
[エラー] def myValBimap[E, S] = new Bifanctor[Tuple2[Seq[E], Seq[S]]] {
そのような型エイリアスが定義されている場合、コンパイラは 2 型サスペンション (ネストされたラムダ型のようなものでしょうか?) を作成していますか?
haskell - バイコモナスの方法は何ですか?
これに提案するより便利な標準クラスを考えながら
何かVectorSpace
-yまたはの代わりにR2
、より一般的な獣がここに潜んでいるのではないかと思いました: a にはType -> Type -> Type
、含まれている 2 つの型の両方を抽出することができます。うーん、もしかしたら彼らはextract
edできるの?
どちらのパッケージにも と呼ばれるものが含まれcomonad
ていないことが判明しました。質問は、そのようなクラスはカテゴリ理論的に意味があるでしょうか? (これも定義されておらず、どのように見えるかを実際に確認できませんでした)とは異なり、単純な定義はもっともらしいようです:bifunctors
Bicomonad
Bimonad
おそらく法律で
しかし、 の結果の両方のフィールドにbidup
同じ型が含まれており、他にもおそらく「より良い」と考えられるシグネチャがかなりの数あることに不安を覚えます。
何かご意見は?
haskell - バイファンクターとは
私はHaskellに比較的慣れておらず、バイファンクターの有用性を理解するのに苦労しています。理論的には理解していると思います。たとえば、Either や Maybe など、複数の具体的な型を抽象化する型にまたがってマッピングしたい場合は、それらを bifunctor にカプセル化する必要があります。しかし一方では、これらの例は特に工夫されているように見えますが、他方では、構成によって同じ機能を簡単に実現できるように見えます。
例として、 Jeremy Gibbons と Bruno C によるThe Essence of the Iterator Pattern でこのコードに出くわしました。S. オリベイラ:
ポイントは、マッピング関数と折りたたみ関数を構成してイテレータ パターンを作成することであると理解しています。これは、2 つのパラメーターを必要とするデータ コンストラクターを定義することによって実現されます。しかし、実際には、通常のファンクターを使用し、bimap の代わりに fmap を使用して関数を構成する場合と、これがどのように違うのかわかりません。この例と、おそらく一般的なものの両方で、明らかに何かが欠けているに違いないと思います。