問題タブ [haskell-lens]
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.
haskell - モノイドインスタンスなしでControl.Lens.Indexedのatの結果を処理するにはどうすればよいですか?
私は最近、Hackageでレンズパッケージを発見し、それを小さなテストプロジェクトで利用しようとしています。このプロジェクトで作業を続けると、非常に遠い日にMUD/MUSHサーバーになる可能性があります。
これは、キー/値コンテナー(私の場合はData.Map.Strict)にアクセスするために使用されるatレンズで現在直面している問題を示すコードの最小化バージョンです。
部屋、プレーヤー、および同様のオブジェクトはコード全体で参照されるため、ID(newtyped UUID)のデータオブジェクトへのマップとしてWorld状態タイプでそれらを格納します。
レンズを持っている人を検索するには、atレンズから返された多分(キーがマップにない場合、これはNothingです)をなんとかして処理する必要があります。私の最後の行では、最終結果がMonoidのインスタンスである限り、タイプチェックを行うトラバースを介してこれを実行しようとしましたが、これは一般的には当てはまりません。ここでは、playerLocationがMonoidインスタンスを持たないRoomIdを返すためではありません。
モノイドはトラバースによって必要とされるのは、トラバースが1より大きいサイズのコンテナーに一般化するためだけなので、これを処理するためのより良い方法があり、必要な1つのオブジェクトに含まれる可能性のあるすべてのタイプで意味的に無意味なモノイドインスタンスを必要としないかどうか疑問に思いました。マップに保存します。
それとも、ここで問題を完全に誤解していて、かなり大きなレンズパッケージのまったく異なるビットを使用する必要があるのでしょうか?
haskell - レンズとジッパー付きのトラバーサルツリー
レンズパッケージを学んでいます。私はそれがかなり挑戦的な仕事だと言わなければなりません。
誰かがレンズからジッパーで木を横断する方法を教えてもらえますか?特に、ルートのリストを取得してサブツリーのブランチにアクセスできるようにする関数を作成するにはどうすればよいですか?
私がこの木を持っているとしましょう。入力が[1, 3]
、の場合、関数はノード10と11へのアクセスを許可する必要があります。
さらに、トラバーサルパスを(StateTまたはIORefに)どの程度正確に使用saveTape
して保存しますか?restoreTape
haskell - 「レンズ」を使用してマップから複数の結果を取得する
これらのインポートを持つ:
および次のように定義されたマップ値:
次のように要素を 1 つずつ取得できます。
私が知りたいのは、次のようなキーのセットを持っていることです:
一致する要素のセット (またはリスト) を取得できるように、そのようなゲッターを構築する方法 (私は推測します):
key に一致するものがないため、結果には 2 つの要素しか含まれていないことに注意してください'd'
。
haskell - アナモフィズムはレンズとどのように関係していますか?
レコード アクセサーであるレンズはどうですか。
http://hackage.haskell.org/packages/archive/lens/3.9.0.2/doc/html/Control-Lens-Type.html#t:レンズ
アナモフィズムに関係?例えば
前者を後者のインスタンスにすることはできますか?
最近レンズをよく使っています。レンズは、Haskell プログラミングにおいて多くの点で重要です。それらはレコード アクセスのためのツールであり、ステートフル プログラムです... レンズについての理解を深めるために、私は「バナナ、レンズ、封筒、および有刺鉄線」という論文を読み始めました。"INSIDE 206-105" の助けを借りて、私は Haskell で -morphisms をゆっくりと再実装しました。すると、上記の疑問が頭に浮かびました。
haskell - Control.Lens を使用したインデックス リストにはモノイド制約が必要です
次のコードはコンパイルされません。
このエラーを与える
MyType がモノイドであることが意味をなさないと仮定すると、このネストされたフィールドにアクセスできるようにする Lens (または Traversal、または最も適切なもの - 区別がわかりません) を取得するにはどうすればよいですか? できれば、読み取りと更新の両方の機能を備えています。
haskell - レンズの組み合わせ
レンズライブラリを使用して、次のように個々のターゲットに変更関数を適用できます。
これらの個々のレンズ (_1
および_3
) を組み合わせて、両方のターゲットに対してこの更新を一度に実行できるようにするにはどうすればよいですか? 私は次の精神で何かを期待しています:
haskell - Getter を Fold に結合する
haskell - Control.Lens から Fold をフィルタリングするためにモナド アクションを使用できますか?
Control.Lens.Fold には が含まれていますfiltered
。これを使用して、モナド アクションを適用する前にリストをフィルター処理できます。対応するものはないようですがfilteredM
、その効果を得る方法はありますか?
明確にするために、私が持っていると言います
which returnactionM
の各要素にどのように適用できますか?xs
predM
True
predM
重要な制約は、 の最初の呼び出しの前に のすべての呼び出しを順序付けたいということですactionM
。そのため、リストに対して 2 つのパスを作成する方法が必要です。predM
andを組み合わせactionM
て単一の関数にすることはできません。