問題タブ [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.
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]
が、効果を扱います(これは素晴らしいです)。
私の質問は次のとおりです。アプリケーションでどこでもエラー チャネルを使用する必要があるのはなぜですか?また、エラー チャネルに何を入れるかをどのように決定すればよいでしょうか?
haskell - プログラマーのための圏論からのバイファンクターの理解 - Ch. 8
プログラマーのための圏論 の第 8 章に頭を悩ませています。
セクション 8.3 で、Bartosz はこの型を定義しています。
ここで、Haskell を少し理解している場合、bf
、、fu
およびは種類のgu
型コンストラクターでありbf
、種類の型コンストラクター ( orと同様) であり、 、 およびは種類の一般的な型です。の左側は書き込みが長すぎる種類の型コンストラクターですが、右側は値コンストラクターであるため、型です。(* -> *) -> (* -> *) -> * -> * -> *
fu
gu
* -> *
Maybe
[]
a
b
*
BiComp
=
BiComp
(bf (fu a) (gu b)) -> BiComp bf fu gu a b
次に、作成者は、型コンストラクターのパラメーターが aであり、型コンストラクターおよびがsであるという条件で、 andにBiComp
バイファンクターを作成します。a
b
bf
Bifunctor
fu
gu
Functor
これまでのところとても良いので、現時点ではすべてが妥当に思えます。型コンストラクターと値コンストラクターに同じ名前を使用すると、おそらく迷子になることを除いて。
今、私は次の観察をしたくなる。
- 定義の
bimap
右側にあるのは、制約を利用するものです。それは、型コンストラクターが実際に何であれ、インスタンスでbimap
定義されていると想定されるものです。したがって、これには type があります。これは、8.1 で提示された型の署名にすぎないため、次の例ほど興味深いものではないと思います。Bifunctor
bf
bimap
(a -> a') -> (b -> b') -> bf a b -> bf a' b'
bimap
Bifunctor
class
- 代わりに、
bimap
左側は、4 番目と 5 番目のパラメーターでBiComp
aを作成するために定義しているものです。Bifunctor
引数f1
とf2
は、 の 4 番目と 5 番目のパラメータであるタイプのエンティティに作用する必要がある関数ですBiComp
。したがって、このbimap
タイプは(a -> a') -> (b -> b') -> BiComp bf fu gu a b -> BiComp bf fu gu a' b'
です。
これは正しいです?
もしそうなら、私は次のことを理解していません
これは、= 、=などでbimap
書かれていることを除いて、上の箇条書きで書いた右側の の型だからです。a
fu a
a'
fu a'
私は何かを見逃していますか(または考えすぎています...)?