問題タブ [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 - このモナド カウンターを Haskell から Scala に変換する
私はScala に変換しようとしているHaskell でモナド カウンターを定義しましたが、これまでのところ惨めに失敗しています。簡単に言えば、問題はカウンターを状態モナドとして実装することであり、環境からカウンターのインクリメント定数を読み取り、カウンターの履歴 (値のシーケンス) をログに記録します。
私の友人は私の解決策を改善し、次の簡単な解決策を思い付きました。
これを Scala + (Cats | ScalaZ) にコーディングしようとしましたが、成功しませんでした。Cats の最新の安定バージョンにはlift
、WriterT
. そしてReaderWriterState
、Scalaz
私は数時間でその方法を使用するlocal
方法を理解できませんでした. そして、それは始まりに過ぎません...
この Haskell ソリューションをシンプルかつエレガントに翻訳するにはどうすればよいでしょうか? (言語で許可されている範囲で)。
サイドノート:
単純なソリューションを Haskell から Scala + FP ライブラリ (Cats、Scalaz) に変換するのに、なぜそんなに多くの時間を費やす必要があるのか、まだ理解しようとしています。Haskell では、各型クラスのインスタンスと使用可能な関数を見つけるのは簡単ですが、IntelliJ、GitHub、および StackOverflow を使用する Scala では、これに数日かかります。だから私は何が間違っているのか、どうすればこの状況を改善できるのか疑問に思っています。
scala - Poly 関数を使用してこのコンパイル エラーを修正する方法
HList
ofXor
を of にマップしようとしましたHList
が、ValidatedNel
エラーが発生しました:
上記のコードの何が問題で、どのように修正すればよいですか?
scala - Scala Cats: free モナドからの結果を反復処理し、それらの結果ごとに free モナド操作を実行する
次の自由モナド定義があるとしましょう:
ここで、すべてのセット名を取得し、これらのセット名ごとに idsFromSet アクションを実行したいと思います。
私はそれを次のように説明します:
しかし、理解のためにモナドを混ぜることができないので、これは不可能です。そのため、「setName <- allSetNames」の行で、コンパイラは Set が与えられており、Free が必要であると文句を言います。
周りを見回すと、モナド変換子が適しているようです。しかし、この情報では、私が見つけたモナド変換子の例は私の例からかけ離れているか、説明が抽象的すぎてこの例に実装できないように見えるため、本当に迷っています。したがって、これに関するいくつかの助けをいただければ幸いです。
編集:私はさらに一歩進んで、これを行うことで結果を達成することができます(IDのコレクションのコレクションではなく、フラット化されたIDが必要であることにも気付きました):
scala - それ自体に依存する Semigroup インスタンスの定義
... または、Scala をコーディングしなければならない Haskell プログラマーの事故、パート 5.
私はScalaで次の構造を持っています:
Semigroup
そして、Cats を使用して、そのインスタンスを定義したいと思います。
これにより、次のエラーが発生します。
したがって、私の推測では、Scala コンパイラーのインスタンスを定義しているため、 ofSemigroup
のインスタンスを派生させることはできません。次のインスタンスがコンパイルされているため、これは確認されているようです。Semigroup
Map[String, ResourceTree]
これが Scala でセミグループのインスタンスを定義する正しい方法である場合、この言語での FP の実行をあきらめるという考えを検討し始めるので、私が間違っていることを本当に望んでいます。
より良い方法はありますか?
scala - この暗黙のインスタンスが Scala コンパイラーに認識されないのはなぜですか?
次のメソッドを定義しました。
ご覧のとおり、|+| を使用する必要があります。Semigroup
Cats ライブラリで定義されている のメソッド。forのインスタンスを定義しましたが、コメント付きのインポートを使用してインポートしても機能しません (演算子が見つかりません)。上記で問題は解決しますが、これは正しくありません。Semigroup
ResourceTree
|+|
dummyInstance
このインポートによってインスタンスが起動されない理由について何か考えはありますか?