問題タブ [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.

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

haskell - マップに存在しない場合のデフォルト値

私の目的のために、ある種の「プロパティ」を持つマップのようなコンテナーが必要です。オブジェクトが異なるプロパティを持つ可能性があります。プロパティにアクセスするために、私はControl.Lensを使用することにしました。これは非常に興味深いものです。しかし、そのようなロジックのレンズのような方法を見つけることができません。プロパティへのアクセス時に、それが存在しない場合は、代わりにデフォルト値を追加し、新しい値を返します。しかし、そこにある場合は、それを使用してください。

つまり、prop_testは True を返す必要があります。

しかし今、op1 は emptyProperties と同じです。デフォルト値には、Data.Default を使用できます。どうすればこれを処理できますか? または、おそらく別の方法を使用する必要がありますか?たとえば、プロパティの存在をアンパックしてチェックする State モナドのラッパー関数です。

また、Control.Lens (または別のレンズ パッケージ) の実例へのリンクを教えてください。

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

haskell - 「レンズ」はどのように機能しますか?

つまり、このような単純なものではありません (ここから):

しかし、lens を使用して から型をマッピングするようなものLinearです。これをレンズで表現すると、次のようになります。

別の例: 現在のコードは、次のような小さな式でいっぱいです。

(ボードがある場所Array (V2 Int))

lensこれを表現するためのより標準的な方法があると思います。

一般的に、レンズができること、できないこと、それがどのように行われるかを知るにはどうすればよいですか?

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

haskell - Snaplet での RST、Lensed、LensT の抽象化を理解するにはどうすればよいですか?

私は最近 Snap のソースを読んでいますが、これは素晴らしいことですが、Snaplet Handler のソースを読み始めたとき、RST、Lensed、LensT の抽象化に行き詰まりました。

LensT が Lensed に変更されました

そしてSnaplet Design言ったWe switched to a slightly more specialized monad formulation called Lensed that avoids traversal of the whole state hierarchy when the state is manipulated.

Snap と Snaplet Handler の実装にはギャップがあるように感じます。キーは RST、LensT、Lensed です。参考になるドキュメントはありますか?

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

haskell - トータルマップのControl.Lensレンズ

タイプAからタイプBまでのトータルマップを持っています。

Data.Map実装例として使用しましたが、何でもかまいません。たとえば、インデックス付きのタプルArrayでもかまいません。Bool

tmAtレンズを構築する関数が必要です。

問題は、 and (or )からどのように構築tmAtするかです。tmGettmSettmModify

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

json - lens-aeson を使用した json の解析

Edward Kmett のマインド拡張レンズと lens-aeson パッケージを試してみます。ウォーミングアップはこちら

望ましい結果は

私は少し進歩することができます

しかし、私はこれまでのところ、正しい答えを得るためにコンビネータを十分に機能させる方法を理解していません。私はおそらくフラグメント ' key "otherkey" ' を含みます。何か案は?

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

haskell - Haskell Control.Lens Traversing Prism

私は深くネストされたデータ構造を持っており、Control.Lens.* を使用して、状態モナドでその値に簡単にアクセスできるようにしています。

したがって、次のことを考慮してください。

メイビー上で「関数的に」操作するにはどうすればよいですか? 次のような慣用的なゲッターを書きたいと思います。

さらに良いことに、Config がより深くネストされている場合、どのように処理すればよいでしょうか?

アクセサー foo と bar を使用して、変更された Bar を返すことができますか?

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

haskell - レンズ化エンティティ システム

reddit に関するこの 2 つのコメントに触発されて、「レンズ化されたエンティティ システム」の作成に着手しました。基本的な考え方はLens' Entity Valueレンズを持つことですが、副作用のある sActionを作成することはありますが、何もないか、組み合わせることはありません。GetterSetterLensM'

おそらく次のようなものを使用Lens' (Entity, State) Valueできますが、これをより良い方法で行う方法 (および場合) に興味があります。


わかりました...ここに私が得たものがあります:

基本的に私は使用できますentityAddress entity(これはタイプである必要がありますがEntity -> Lens' EntitySystem Address、ghcは不平を言っています)。しかし、これは「レンズっぽい」とは感じません。私が望んでいるentityAddress :: Lens' Entity Addressのは、エンティティ システムのすべてのステートフルな処理がユーザーから隠されているようなものです。

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

haskell - Control.Lens で IndexedTraversal を使用して、各要素に対してインデックス対応アクションを実行するにはどうすればよいですか?

IndexedTraversal(パッケージから)がControl.Lensあり、その中の各要素にインデックス対応のモナド アクションを適用したいと考えています。残念ながら、このようなことを行う便利な方法 (関数^!と組み合わせるなど) はすべてact、各要素のインデックスを無視しているようです。インデックス付きトラバーサルですべての要素 (およびそのインデックス) に対してアクションを実行する良い方法はありますか?

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

haskell - Lens' ab を Lens' a (たぶん b) に変換する

次のようないくつかのデータ構造があります

そこで、簡単に作成できるように単純な型クラスを作成することにしました

しかし、これらの構造の一部に対応するフィールドがオプションとしてあるという問題に遭遇しました

そして今、型クラスを使用できなくなりました。そのフィールドがオプションではないデータ型とほぼ同じ数のデータ型があるため、型クラスを変更する方がよいと判断しました。

しかし、私はレンズ ライブラリの経験があまりないので、この新しいレンズをData1およびの型で機能させる方法を考え出すのに苦労していますData2。理想的には、それを表示してMaybe Int任意のタイプの値を取得できるようにしたいと思います。設定するときJust xは、フィールドをxforData1とに設定しData2、渡されたときにこれら 2 つのタイプの操作を行わないようにしたいと考えていNothingます。

これは既存のコンビネータを使用して可能ですか、それとも自分でレンズを作成する必要がありますか? 私はそうしても問題ありませんが、既存のチュートリアルの大半は TH を使用しており、手書きでの記述の詳細については触れていません。

GHC 7.6.3 とlens3.10 を使用しています。