問題タブ [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 投票する
2 に答える
1450 参照

scala - モノクルを使用してマップを更新する方法

Monocleライブラリを試してみたいと思います。しかし、基本構文のヘルプ リソースが見つかりませんでした。

要するに、光学系Map[K,V] -> Aを持つ光学系が必要V -> Aです。これをどのように定義できますか?

私がいくつか持っているとしましょう

次に simple が必要な場所に遭遇したStateStore => StateStoreので、インポートしています

そして最初に定義しようとしています:

ここに来る

あいまいな暗黙の値: 型のメソッドと型のメソッドの両方が 期待 さatMapれる型 と一致 しますtrait MapInstances[K, V]=> monocle.function.At[Map[K,V],K,V]atSettrait SetInstances[A]=> monocle.function.At[Set[A],A,Unit]monocle.function.At[S,Path,A]

私の定義をに変更しようとしています

今すぐ取得:

型の不一致; found : monocle.function.Index[Map[Path,Nothing],Path,Nothing] (展開先) monocle.function.Index[Map[List[String],Nothing],List[String],Nothing] required: monocle.function.Index[Map[Path,Nothing],Path,A] (展開先)monocle.function.Index[Map[List[String],Nothing],List[String],A]

注: Nothing <: Aですがtrait Index、型では不変Aです。代わりにAasを定義することもできます。+A(SLS4.5)

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

scala - モノクルのオプションは部分レンズと同じですか?

Monocle のオプションには、次のアクセス関数があります ( の場合Optional[C,A]):

これは、(部分的な) 非対称データ レンズの元の定義と矛盾しています。私は期待します:

その理由は何ですか?Monocle でクラシック パーシャル レンズを入手するにはどうすればよいですか? レンズをプログラミングするとき、get よりも set の全体を保証する方がはるかに問題があることがわかりました...

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

scala - `Lens` を介して `State` をマップする

のような署名を持つ関数はありますか

セマンティクスを使用して、選択した部分の変更を実行し、結果を取得します

1つの実装は

しかし、 monocleまたはscalaz.Lensを使用するより簡単な方法があれば?

0 投票する
2 に答える
682 参照

scala - Scala:モノクルでフィールド値をアップサートする方法

モノクル プロジェクトのJsonExampleを使用して、set 呼び出しがキーと値のペアの値を置き換えるか、キーと値のペアがまだ存在しない場合は作成するレンズを作成したいと思います。

ただし、これはインデックス(タイプセーフを構成できる)またはタイプセーフではないatのいずれかで表されているようです

私ができることは何ですか?
age が別の JsObject にネストされている場合、次のように拡張することもできます。

「ネストされた」のキーと値のペアがまだ存在しない場合、ネストされたオブジェクトを作成してからフィールドを追加します

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

scala - エラー処理付きレンズ/プリズム

一対の変換関数があるとしましょう

Optics を使用すると、これらをかなり簡単に表すことができます。

stringIntPrism :: Prism String Int

ただし、失敗の理由を表現したい場合は、これらを 2 つの別個の関数として保持する必要があります。

この単純な例Maybeはまったく問題ありません。なぜなら、失敗は解析の失敗であると常に想定できるため、実際には、Either 型または Validation 型を使用してこれをエンコードする必要がないからです。

ただし、プリズムの解析に加えて、いくつかの検証を実行したいと考えてください。

これらを一緒に構成できれば理想的です。

ageField = isUnder55 . isOver18 . string2Int :: ValidationPrism [e] String Int

これは手作業で構築するのはかなり簡単ですが、レンズ/光学の分野にはすでにこれを行う何かが潜んでいる可能性があるというのは十分に一般的な概念のようです。これを処理する既存の抽象化はありますか?

tl;dr

Maybe に直接結び付けるのではなく、任意のファンクターでパラメーター化できる部分的なレンズ/プリズム/アイソメを実装する標準的な方法はありますか?

上記の Haskell 記法はより単純なので使用しましたが、実際には Scala で Monocle を使用してこれを実装しています。ただし、ekmett の Lens ライブラリに固有の回答に完全に満足しています。

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

scala - モノクルによるマップの変更

私はレンズを試してみたかったのですが、Monocle ライブラリは (私の初心者の観点からは) これらの空想的なボイラープレートのないすべてのものに適しているように見えました@Lenses。残念ながら、初心者向けの学習教材はほとんどまたはまったくないことがわかりました (バニラ Scala の FP の基本は知っていますが、Scalaz は知りません)。公式のチュートリアルには簡単な例 (および/またはその結果) がなく、非常に複雑な Scalaz ライブラリが混在しています。マップへのアクセスなどの簡単なタスクは、最初のページで説明されると思われます。

次のスニペットがあります。

私はatとを見ましindexたが、単純な例はありません (applyOptionalボイラープレートが必要な奇妙な [私にとっての魔法] の答えだけです)。housesで地図を更新したいTown。私はこの精神で何かを試みていました:

これは構文的に間違っていますが、私がやりたかったことは明らかだと思います(指定された座標での変更)presentsDelivered。私の質問は、マップにアクセスするためにパーツを変更する方法ですか?Housex, yindex

ヘルプ、手がかり、初心者向けの学習教材のヒントは大歓迎です。