問題タブ [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.
json - jq CLIツールと同じように、circe-opticsのJsonPathを文字列で使用する方法はありますか?
私がやりたいのは、フィールド記述子を として定義し、 json のfield1.field2[1].field3
値にアクセスすることです。two
applyDynamic
と を使用してそれができることはわかっていますがroot.field1.field2.index(1).field3
、文字列を使用してそのようなレンズを作成する方法はありますか?
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モノクルの場合のようにOption
、None
. 多分私は問題について別の方法で考える必要がありますか?
ありがとう
scala - シーケンスを使用してモノクル レンズを作成するには?
ネストされたケース クラスとシーケンスを使用してモノクル レンズを作成しようとしています。
最後の行でコンパイルが失敗します。Monocle 1.5.0-cats を使用しています。
PS: で置き換えるSeq[B]
ことList[B]
はできますが、私の場合のクラスは、シーケンスを使用する scalaxb によって生成されます。
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
焦点を合わせ 、配列として走査するとします。これは.partialxs
PartialState
Traversal<PartialState, Partial<Child>>
また、すべての に適用された新しいを生成するすべての子にdeclare const fn = (x:Partial<Child>):Partial<Child>
適用できるを持っていることも確認してください。fn
composedTraversal.modify(fn)(partialState)
PartialState
fn
partialxs
このトラバーサルを別のものに「拡大」または「変換」して、レンズとトラバーサルを構成して使用できる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
ば、それが機能することを知ることができますが、それは、ええと、壊れやすいようです。
scala - モノクル ライブラリを scala プロジェクトに追加するには?
scala プラグインを使用した scala プロジェクトがあります。プロジェクトにこのモノクル ライブラリ ( https://www.optics.dev/Monocle/ ) を使用する必要がありますが、プロジェクトに追加する方法がわかりません。sbt プロジェクトの場合、build.sbt ファイルが必要で、そこに次のようなものを簡単に入れることができます。
私に依存関係を追加する必要があります。ただし、現在のプロジェクトでこれを行う方法がわかりません。オンラインでリードを実際に見つけることができません。ダウンロードできる場所には.jarファイルはありません。
私はまた、このことでライブラリのドキュメントへのリンクを試みました:
うまくいきませんでした。私のディレクトリ構造は次のようになります。