問題タブ [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.
scala - Scala with Cats - デカルト + 検証済み
私はAdvanced scala with cats
自分で本の簡単なエクササイズをしています。
Cartesian
と使いたいValidated
。
私は完全に無知です。ヒントはありますか?私は得ています:
could not find implicit value for parameter instance: cats.Cartesian[Result]
Cartesian[Result].product(
^
scala - フリーモナドの最適化
もし私が value を持っている場合、 free モナドによって結合された 2 つの s が 1 つに折りたたまれるようにa: Free[Op, A]
、 の構造を「平坦化」することは可能ですか?a
Op
コンテキスト:Op
のセマンティックは操作が冪等であるため、これを解釈前の最適化ステップとして実行したいと思います。したがって、2 つが「連続して」表示される場合、2 番目は、プログラムのセマンティクスを犠牲にすることなく削除できます。
scala - Scala でコレクション内の最初に定義された項目を見つける
coll: C[A]
コレクションと functionが与えられた場合、 Scala でコレクション全体を評価せずに定義されf: A => Option[B]
た最初の項目を取得する慣用的な方法は何ですか?coll
f
これが私の意図した署名です:
coll.flatMap(f).headOption
コレクション全体を評価するような素朴なアプローチです。できるかもしれませんが、標準ライブラリ、関数型プログラミングの文献、coll.view.flatMap(f).headOption
またはcoll.collectFirst(Function.unlift(f))
scalaz/cats のいずれかに、これを可能にするものが他にありますか?
scala - Scala+Cats でフリー モナドを使用して任意のツリーを使用する
2 つの異なる解釈を持つ文法用のライブラリを作成しています。1) 文法に基づいて文字列を解析し、2) 文法によって定義された言語で文字列を生成します。
ライブラリは cat を使用して、文法の AST をフリー モナドとして作成します。しかし、自由なモナドは私の AST のリストのような表現を作成し、これはステートメント リストに適しているため、完全には適合しないように思われますが、文法はステートメント リストとはかけ離れており、任意のツリー構造にはるかに近いものです。
~
演算子を使用して連結された 2 つの文法を示すことで、ツリーを実装することができました。AST は、それ自体が任意の AST である文法のリストです。
私の質問は: フリー モナドで AST のサブツリーを再帰する良い方法は何ですか?
私の現在の実装はここにあります:
Multi
サブツリーを再帰的に解釈するために、このケースでは安全でない再帰 (つまり、末尾再帰ではない) が使用されていることに特に注意してください。これを行うより良い方法はありますか?
scala - 関数のようなモナドを猫と規律でテストする方法
Reads[T]
と呼ばれるPlay Json 型によく似た Monad のような型を作成しましたReadYamlValue
。
このための catMonad
インスタンスを作成しました。
そして、MonadLaws
ScalaCheck でテストしたいと思いました。
しかし、私は得る:
Eq
実質的に関数を定義するにはどうすればよいですか? 関数の等価性を比較することは、私が望むものではないようです...私のReadYamlValue
クラスはモナドでもファンクターでもありませんか?
これを行う 1 つの方法は、任意のサンプルを生成し、結果の等価性を比較することです。
しかし、これは平等の定義を少し回避しているようです。これを行うためのより良い、またはより標準的な方法はありますか?
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] = 暗黙的に
scala - Cats Seq[Xor[A,B]] => Xor[A, Seq[B]]
一連のエラーまたはビューがあります ( Seq[Xor[Error,View]]
)
Xor[Error, Seq[View]]
これを最初のエラー (ある場合) またはビューのシーケンス ( ) または単に ( Xor[Seq[Error],Seq[View]
)の Xor にマップしたい
これどうやってするの?
scala - セミグループとセミグループKの違い
cat には 2 つのセミグループ型クラスがありますSemigroup
。SemigroupK
後者は型コンストラクターで動作します。前者に対する後者の利点がわかりません。彼らが提供しているリストインスタンスを見るとMonoid
( はありますがMonoidK
)、NonEmptyList
提供しているのはSemigroupK
. 次のメソッド経由NonEmptyList
でも提供していることに注意してください。Semigroup
なぜ不一致なのですか?
次に、ほとんどのセミグループ操作は on でのみ利用可能であり、利用できSemigroup
ないようですSemigroupK
(ありますが、私が見たのreduceK
はそれだけであり、これは onReducible
に委任されます)。reduce
Semigroup
では、 type が与えられた場合、 aとa のT[_]
両方を持つことで何が得られるでしょうか?SemigroupK[T]
Semigroup[T[A]] for some A
編集
MonoidK と SemigroupK を削除する問題が発生しました: https://github.com/typelevel/cats/issues/1932