問題タブ [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.

0 投票する
1 に答える
640 参照

scala - ZIO エラー チャネルとは何ですか? また、何を入れるかについての感覚を得るにはどうすればよいですか?

ZIO( https://zio.dev/ ) は、コアにデータ構造を持つ scala フレームワークでありZIO[R, E, A]、そのサイトは 3 つのパラメーターについて次の情報を提供します。

ジオ

データ型には、次のZIO[R, E, A]3 つの型パラメーターがあります。

  • R- 環境タイプ。この効果には type の環境が必要Rです。この型パラメーターがAnyの場合、効果は任意の値 (単位値など) で実行できるため、効果に要件がないことを意味します()
  • E- 障害の種類。効果は type の値で失敗する場合がありますE。を使用するアプリケーションもありますThrowable。この型パラメーターが Nothingの場合、Nothing 型の値がないため、効果が失敗しないことを意味します。
  • A- 成功タイプ。効果は type の値で成功する場合がありますA。この型パラメーターがUnitの場合、効果は有用な情報を生成しないことを意味し、 の場合Nothing、効果が永久に (または失敗するまで) 実行されることを意味します。

何が何であるかを理解するのは簡単Aです。これは、名目上のケースで関数によって返される値です。つまり、関数をコーディングした理由です。 Rは一種の依存性注入です - 興味深いトピックですが、ZIO常に設定することで無視して使用できますAny(実際にIO[E, A] = ZIO[Any, E, A]は lib にエイリアスがあります)。

したがって、それEはエラー用のタイプのままです (有名なエラー チャネル)。私は大まかにそれIO[E, A]が一種だと思いますEither[E, A]が、効果を扱います(これは素晴らしいです)。

私の質問は次のとおりです。アプリケーションでどこでもエラー チャネルを使用する必要があるのはなぜですか?また、エラー チャネルに何を入れるかをどのように決定すればよいでしょうか?

0 投票する
1 に答える
83 参照

haskell - プログラマーのための圏論からのバイファンクターの理解 - Ch. 8

プログラマーのための圏論 の第 8 章に頭を悩ませています。

セクション 8.3 で、Bartosz はこの型を定義しています。

ここで、Haskell を少し理解している場合、bf、、fuおよびは種類のgu型コンストラクターでありbf、種類の型コンストラクター ( orと同様) であり、 、 およびは種類の一般的な型です。の左側は書き込みが長すぎる種類の型コンストラクターですが、右側は値コンストラクターであるため、型です。(* -> *) -> (* -> *) -> * -> * -> *fugu* -> *Maybe[]ab*BiComp =BiComp (bf (fu a) (gu b)) -> BiComp bf fu gu a b

次に、作成者は、型コンストラクターのパラメーターが aであり、型コンストラクターおよびがsであるという条件で、 andにBiCompバイファンクターを作成します。abbfBifunctorfuguFunctor

これまでのところとても良いので、現時点ではすべてが妥当に思えます。型コンストラクターと値コンストラクターに同じ名前を使用すると、おそらく迷子になることを除いて。

今、私は次の観察をしたくなる。

  • 定義のbimap右側にあるのは、制約を利用するものです。それは、型コンストラクターが実際に何であれ、インスタンスでbimap定義されていると想定されるものです。したがって、これには type があります。これは、8.1 で提示された型の署名にすぎないため、次の例ほど興味深いものではないと思います。Bifunctorbfbimap(a -> a') -> (b -> b') -> bf a b -> bf a' b'bimapBifunctorclass
  • 代わりに、bimap左側は、4 番目と 5 番目のパラメーターでBiCompaを作成するために定義しているものです。Bifunctor引数f1f2は、 の 4 番目と 5 番目のパラメータであるタイプのエンティティに作用する必要がある関数ですBiComp。したがって、このbimapタイプは(a -> a') -> (b -> b') -> BiComp bf fu gu a b -> BiComp bf fu gu a' b'です。

これは正しいです?

もしそうなら、私は次のことを理解していません

これは、= 、=などでbimap書かれていることを除いて、上の箇条書きで書いた右側の の型だからです。afu aa'fu a'

私は何かを見逃していますか(または考えすぎています...)?