問題タブ [scala-cats]

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 に答える
849 参照

scala - Scala with Cats - デカルト + 検証済み

私はAdvanced scala with cats自分で本の簡単なエクササイズをしています。

Cartesianと使いたいValidated


私は完全に無知です。ヒントはありますか?私は得ています:

could not find implicit value for parameter instance: cats.Cartesian[Result] Cartesian[Result].product( ^

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

scala - フリーモナドの最適化

もし私が value を持っている場合、 free モナドによって結合された 2 つの s が 1 つに折りたたまれるようにa: Free[Op, A]、 の構造を「平坦化」することは可能ですか?aOp

コンテキスト:Opのセマンティックは操作が冪等であるため、これを解釈前の最適化ステップとして実行したいと思います。したがって、2 つが「連続して」表示される場合、2 番目は、プログラムのセマンティクスを犠牲にすることなく削除できます。

0 投票する
3 に答える
274 参照

scala - Scala でコレクション内の最初に定義された項目を見つける

coll: C[A]コレクションと functionが与えられた場合、 Scala でコレクション全体を評価せずに定義されf: A => Option[B]た最初の項目を取得する慣用的な方法は何ですか?collf

これが私の意図した署名です:

coll.flatMap(f).headOptionコレクション全体を評価するような素朴なアプローチです。できるかもしれませんが、標準ライブラリ、関数型プログラミングの文献、coll.view.flatMap(f).headOptionまたはcoll.collectFirst(Function.unlift(f))scalaz/cats のいずれかに、これを可能にするものが他にありますか?

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

scala - Scala+Cats でフリー モナドを使用して任意のツリーを使用する

2 つの異なる解釈を持つ文法用のライブラリを作成しています。1) 文法に基づいて文字列を解析し、2) 文法によって定義された言語で文字列を生成します。

ライブラリは cat を使用して、文法の AST をフリー モナドとして作成します。しかし、自由なモナドは私の AST のリストのような表現を作成し、これはステートメント リストに適しているため、完全には適合しないように思われますが、文法はステートメント リストとはかけ離れており、任意のツリー構造にはるかに近いものです。

~演算子を使用して連結された 2 つの文法を示すことで、ツリーを実装することができました。AST は、それ自体が任意の AST である文法のリストです。

私の質問は: フリー モナドで AST のサブツリーを再帰する良い方法は何ですか?

私の現在の実装はここにあります:

Multiサブツリーを再帰的に解釈するために、このケースでは安全でない再帰 (つまり、末尾再帰ではない) が使用されていることに特に注意してください。これを行うより良い方法はありますか?

ソースコードについては、ここをクリックしてください。

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

scala - 関数のようなモナドを猫と規律でテストする方法

Reads[T]と呼ばれるPlay Json 型によく似た Monad のような型を作成しましたReadYamlValue

このための catMonadインスタンスを作成しました。

そして、MonadLawsScalaCheck でテストしたいと思いました。

しかし、私は得る:

Eq実質的に関数を定義するにはどうすればよいですか? 関数の等価性を比較することは、私が望むものではないようです...私のReadYamlValueクラスはモナドでもファンクターでもありませんか?

これを行う 1 つの方法は、任意のサンプルを生成し、結果の等価性を比較することです。

しかし、これは平等の定義を少し回避しているようです。これを行うためのより良い、またはより標準的な方法はありますか?

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

scala - Free モナド - ネストされた Coproduct を含む暗黙的な Inject には、cats を使用します

使用したい 3 つの DSL があるとします。

最終的な構成は次のとおりです。

それを利用するには、適切なInjectインスタンスが必要です (2 つの DSL と 1 つの副産物だけで、暗黙のうちに取得できるはずです)。

これはうまくコンパイルされます。ただし、実行時にはそれらはすべてnull.

// 編集:

上記の問題は、これらの値を次のようにマークしているようですimplicit(再帰的な解決が発生します)。削除implicitすると、次の正しいエラーが表示されるようです。

エラー:(28, 36) あいまいな暗黙の値: タイプ [A] のオブジェクト Predef の値 StringCanBuildFrom => scala.collection.generic.CanBuildFrom[String,Char,String] とメソッド $conforms の両方 => < :<[A,A] 予想される型 T def inj1 に一致: Inject[Test1Op, Api] = 暗黙的に

エラー:(28, 36) パラメータ e の暗黙的な値が見つかりませんでした: T def inj1: Inject[Test1Op, Api] = 暗黙的に

エラー:(28, 36) タイプが一致しません。found : 必要なユニット: cats.free.Inject[com.example.Test1Op,com.example.Hello.Api] def inj1: Inject[Test1Op, Api] = 暗黙的に

0 投票する
2 に答える
1146 参照

scala - Cats Seq[Xor[A,B]] => Xor[A, Seq[B]]

一連のエラーまたはビューがあります ( Seq[Xor[Error,View]])

Xor[Error, Seq[View]]これを最初のエラー (ある場合) またはビューのシーケンス ( ) または単に ( Xor[Seq[Error],Seq[View])の Xor にマップしたい

これどうやってするの?

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

scala - セミグループとセミグループKの違い

cat には 2 つのセミグループ型クラスがありますSemigroupSemigroupK後者は型コンストラクターで動作します。前者に対する後者の利点がわかりません。彼らが提供しているリストインスタンスを見るとMonoid( はありますがMonoidK)、NonEmptyList提供しているのはSemigroupK. 次のメソッド経由NonEmptyListでも提供していることに注意してください。Semigroup

なぜ不一致なのですか?

次に、ほとんどのセミグループ操作は on でのみ利用可能であり、利用できSemigroupないようですSemigroupK(ありますが、私が見たのreduceKはそれだけであり、これは onReducibleに委任されます)。reduceSemigroup

では、 type が与えられた場合、 aa のT[_]両方を持つことで何が得られるでしょうか?SemigroupK[T] Semigroup[T[A]] for some A

編集

MonoidK と SemigroupK を削除する問題が発生しました: https://github.com/typelevel/cats/issues/1932