問題タブ [monocle-scala]

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 投票する
0 に答える
467 参照

json - jq CLIツールと同じように、circe-opticsのJsonPathを文字列で使用する方法はありますか?

私がやりたいのは、フィールド記述子を として定義し、 json のfield1.field2[1].field3値にアクセスすることです。two

applyDynamicと を使用してそれができることはわかっていますがroot.field1.field2.index(1).field3、文字列を使用してそのようなレンズを作成する方法はありますか?

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

scala - オプションを使用して深くネストされたケース クラスを更新する

データベース内の一部のデータを表す一連のオプションを備えた 3 レベルのネストされたケース クラス モデルがあります。それは本質的に次のとおりです。

いくつかの理解またはチェーンflatMap(別の Option オブジェクト内の Scala Option オブジェクト) を使用して、これから深くネストされたフィールドを取得する方法を理解しています。また、レンズ ライブラリを使用してそれを更新する方法も理解していますが、ツリー内のいくつかのものがまだ存在しない場合でも、それらの s をNone自動的に作成します。Some

たとえば、keysリストに追加したいが、ユーザーがまだ何も設定していない場合はどうすればよいsettingsでしょうか? Some(settings)ある意味で、フィールドとフィールドを自動的に作成することは可能Some(keys)ですか?

多くのパターンマッチングでそれを行う方法についてのアイデアはありますが、これは、1. コードが右方向にずれていること、および 2.オプションを使用していない、mapまたはほとんど使用していないため、間違っているようです。flatMap

これは、レンズ ライブラリを単独で使用することで可能ですか? 私はそれが不可能かもしれないことをここで読みました:https://github.com/julien-truffaut/Monocle/issues/215モノクルの場合のようにOptionNone. 多分私は問題について別の方法で考える必要がありますか?

ありがとう

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

scala - シーケンスを使用してモノクル レンズを作成するには?

ネストされたケース クラスとシーケンスを使用してモノクル レンズを作成しようとしています。

最後の行でコンパイルが失敗します。Monocle 1.5.0-cats を使用しています。

PS: で置き換えるSeq[B]ことList[B]はできますが、私の場合のクラスは、シーケンスを使用する scalaxb によって生成されます。

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

typescript - 部分オブジェクトを取り、レンズとトラバーサルを使用して「塗りつぶされた」オブジェクトを返す関数型プログラミング/光学概念?

(編集私は monocle-ts を使用してますが、 monocle-ts では不可能な場合 (著者は、元の Monocle for Scala の部分的な移植にすぎないとさえ言っているため)、任意の言語の別の光学パッケージに何かがある場合は、私は、これらのアイデアを TypeScript に移植することにオープンです。)

Partial<A>typeの一部またはすべてを持ち、非メンバーを持たないレコードを表すようなヘルパー型があるとしAます。A = { foo: number, bar: string }(その場合Partial<A> = { foo?: number, bar?: string }) (編集これは Typescript の組み込みの Partial ユーティリティ タイプです。)

私はから始めます

レンズを合成し、トラバーサルを合成 ( ) して、レンズからcomposedTraversal焦点を合わせ 、配列として走査するとします。これは.partialxsPartialStateTraversal<PartialState, Partial<Child>>

また、すべての に適用された新しいを生成するすべての子にdeclare const fn = (x:Partial<Child>):Partial<Child>適用できるを持っていることも確認してください。fncomposedTraversal.modify(fn)(partialState)PartialStatefnpartialxs

このトラバーサルを別のものに「拡大」または「変換」して、レンズとトラバーサルを構成して使用できるfillInTheGapsようにする概念はPartialStateありますStateか?

私の構文が TypeScript であることを無視して、monocle-scala タグを追加しました。この概念が存在する場合、それは Monocle ライブラリにあり、その知識を使用しているライブラリに変換できるからです。

編集この質問の動機となる問題は、ユーザーがデータを入力するReduxアプリにフォーム入力があることですが、ほとんどは必要ありません。入力はコンパイル時に認識されない (RESTful API クエリから再試行される) ため、モデルを次のように表すことはできません。

代わりに、次のように表されます。

RESTful サーバーからデフォルト モデルを取得することもできます。そこで、これらをParent(サーバーから来るもの) とPartial<Parent>(アプリでのユーザーの入力を表すもの) としてモデル化しました。

いくつかの計算を行う前に、不足している小道具のデフォルトを折りたたむ必要があります。これは、fillInTheGaps上記で参照した私の関数です。

コード内の型を介してこれが行うことを強制し、既に多くのオプティクスを記述しているため、その一部を再利用したいと考えていました。私は実際に、このデータに対して他の操作を実行するためにレンズとトラバーサルを作成しました。myLens.compose(myTraversal).modify(fn)を取り、 aPartial<State>を返しますが、Partial<State>これらを構成して、部分的なものを取り、全体を返す関数になることを望んでいました。

明らかに、書いconst filler: (Partial<State>):State = myLens.compose(myTraversal).modify(fillInTheGaps)てからその上に a を投げれ//@ts-ignoreば、それが機能することを知ることができますが、それは、ええと、壊れやすいようです。

0 投票する
0 に答える
68 参照

scala - モノクル ライブラリを scala プロジェクトに追加するには?

scala プラグインを使用した scala プロジェクトがあります。プロジェクトにこのモノクル ライブラリ ( https://www.optics.dev/Monocle/ ) を使用する必要がありますが、プロジェクトに追加する方法がわかりません。sbt プロジェクトの場合、build.sbt ファイルが必要で、そこに次のようなものを簡単に入れることができます。

私に依存関係を追加する必要があります。ただし、現在のプロジェクトでこれを行う方法がわかりません。オンラインでリードを実際に見つけることができません。ダウンロードできる場所には.jarファイルはありません。

私はまた、このことでライブラリのドキュメントへのリンクを試みました:

ここに画像の説明を入力

うまくいきませんでした。私のディレクトリ構造は次のようになります。

ここに画像の説明を入力