問題タブ [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 - システムテスト DSL のための実用的な無料モナド: 並行性とエラー処理
Scala でシステム テストを記述するための DSL を作成しようとしています。この DSL では、一部の操作が非同期で行われる可能性がある (たとえば、テスト対象の Web サービスを使用して実装されているため)、またはエラーが発生する可能性がある (Web サービスが利用できない可能性があるため) という事実を公開したくありません。 、そしてテストを失敗させたい)。この回答では、このアプローチはお勧めできませんが、テストを書くための DSL のコンテキストでは、これに完全には同意しません。これらの側面の導入により、DSL は不必要に汚染されると思います。
質問を組み立てるには、次の DSL を検討してください。
ここで、テスト対象のサービスを使用してストア内の要素を配置およびカウントするインタープリターを実装したいとします。put
ネットワークを利用するので、非同期で運用してほしい。また、ネットワークエラーやサーバーエラーが発生する可能性があるため、エラーが発生したらすぐにプログラムを停止してほしい。私が何を達成したいのかを理解するために、モナド変換子 (Scala に変換できない) を使用して Haskell のさまざまな側面を混合する例を次に示します。
M
だから私の質問は、上記の要件を満たすインタープリターにどのモナドを使用するかということです:
M がモナド変換器の場合、選択した FP ライブラリ (Cats、Scalaz) を使用してそれらをどのように構成しますか。
scala - 猫は記号 |@| を解決できません。
ここから取得した次のコードがあります: http://underscore.io/blog/posts/2015/06/10/an-introduction-to-cats.html。
しかし、私は得ています:
私のbuild.sbt
:
インポートまたは使用する必要があるものは他にありますか?
scala - より高度なインターフェース用のアダプターの生成
次のようなインターフェイスを定義したシナリオに陥ることがよくあります。
次に、特定の実装に最も適した Higher Kinded Type で型指定されたいくつかの異なる実装を記述します。
すべての実装は完全に有効であり、特定の Higher Kinded Type にラップされた結果を返します。
次に、ビジネス ロジックを記述することがよくあります。たとえば、使用しているロジックのブロックでFuture
コンテキストとして使用しているとします。たとえば、次のようなものを記述します。
上記のコードは非常にうまく機能しますFooImpl2
が、他の実装は直接スロットインしません。このシナリオでは、私はいつも単純なアダプターを書くことになります:
アダプタの記述は問題ありませんが、多くの定型句が必要です。特に、多くの機能を持つインターフェイスの場合はそうです。さらに、各メソッドは、各メソッドに対してまったく同じ適応処理を取得します。私が本当にやりたいのはlift
、既存の実装からのアダプターの実装です。適応メカニズムで一度だけ指定します。
私はこのようなものを書くことができるようになりたいと思います:
だから私はそれを次のように使うことができます:
generateAdapterFn
問題は、関数をどのように記述できるかです。
これを解決する方法、または私の問題に対する他の一般的なパターンや解決策があるかどうかはよくわかりません。私generateAdapterFn
が望む関数を書くには、マクロを書く必要があると思いますか? もしそうなら、どのようにそれを行うことができますか?
scala - どっち[未来[A]、未来[B]]を未来[どちら[A、B]]に変換する方法
のインスタンスがEither[Future[A], Future[B]]
あり、それを に変換したいと思いますFuture[Either[A, B]]
。
前回の質問以降、cats 0.8.1がリリースされ、ライブラリの構造が変更され、2.12 で右バイアスになっている がXor
優先されました。Either
したがって、以前に受け入れられた回答で説明されている方法は機能しなくなりました。適切なインポートを見つけようとしましたが、失敗しました。
もっともらしく見えましたが、残念ながら機能しません。コンパイルはまだ失敗しますvalue bisequence is not a member of Either[scala.concurrent.Future[A],scala.concurrent.Future[B]]
インポートを に拡大して*.all._
も、コンパイラ エラーは変わりませんでした。
プロジェクトが依存するすべてのライブラリが2.12のバージョンをリリースしたわけではないため、私はscala 2.11.8を使用しています
scala - Scala でのファンクター (F[A] => G[A]) の変換 (cats または scalaz)
Cats または Scalaz に、異なるコンテナ タイプ間で変換する型クラスはありますか? 例えば
- オプション ~> 試す
- ~> 未来を試す
- ~> どちらかを試してください
- オプション ~> リスト
FunctionK
/ ~>
/NaturalTransformation
は私が探しているものかもしれませんが、インスタンスが定義されておらず、その理由がわかりません。
scala - 猫モナドトランスフォーマー
猫ライブラリで MonadTransformers を使用してモナドをネストする方法を学ぼうとしています。
だから私は、Either[String, Option[A]] のデータ型を構築しようとしています
これは私が書いたコードです
しかし、私はエラーが発生します
使用していたサンプルからこれを取得しましたが、最新の猫のライブラリが削除されてどちらかが優先Xor
されたと思います。Xor