問題タブ [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を使用することにしました。これは非常に興味深いものです。しかし、そのようなロジックのレンズのような方法を見つけることができません。プロパティへのアクセス時に、それが存在しない場合は、代わりにデフォルト値を追加し、新しい値を返します。しかし、そこにある場合は、それを使用してください。
つまり、prop_testは True を返す必要があります。
しかし今、op1 は emptyProperties と同じです。デフォルト値には、Data.Default を使用できます。どうすればこれを処理できますか? または、おそらく別の方法を使用する必要がありますか?たとえば、プロパティの存在をアンパックしてチェックする State モナドのラッパー関数です。
また、Control.Lens (または別のレンズ パッケージ) の実例へのリンクを教えてください。
haskell - 「レンズ」はどのように機能しますか?
つまり、このような単純なものではありません (ここから):
しかし、lens を使用して から型をマッピングするようなものLinear
です。これをレンズで表現すると、次のようになります。
別の例: 現在のコードは、次のような小さな式でいっぱいです。
(ボードがある場所Array (V2 Int)
)
lens
これを表現するためのより標準的な方法があると思います。
一般的に、レンズができること、できないこと、それがどのように行われるかを知るにはどうすればよいですか?
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 です。参考になるドキュメントはありますか?
haskell - トータルマップのControl.Lensレンズ
タイプAからタイプBまでのトータルマップを持っています。
Data.Map
実装例として使用しましたが、何でもかまいません。たとえば、インデックス付きのタプルArray
でもかまいません。Bool
tmAt
レンズを構築する関数が必要です。
問題は、 and (or )からどのように構築tmAt
するかです。tmGet
tmSet
tmModify
json - lens-aeson を使用した json の解析
Edward Kmett のマインド拡張レンズと lens-aeson パッケージを試してみます。ウォーミングアップはこちら
望ましい結果は
私は少し進歩することができます
しかし、私はこれまでのところ、正しい答えを得るためにコンビネータを十分に機能させる方法を理解していません。私はおそらくフラグメント ' key "otherkey" ' を含みます。何か案は?
haskell - Haskell Control.Lens Traversing Prism
私は深くネストされたデータ構造を持っており、Control.Lens.* を使用して、状態モナドでその値に簡単にアクセスできるようにしています。
したがって、次のことを考慮してください。
メイビー上で「関数的に」操作するにはどうすればよいですか? 次のような慣用的なゲッターを書きたいと思います。
さらに良いことに、Config がより深くネストされている場合、どのように処理すればよいでしょうか?
アクセサー foo と bar を使用して、変更された Bar を返すことができますか?
haskell - レンズ化エンティティ システム
reddit に関するこの 2 つのコメントに触発されて、「レンズ化されたエンティティ システム」の作成に着手しました。基本的な考え方はLens' Entity Value
レンズを持つことですが、副作用のある sAction
を作成することはありますが、何もないか、組み合わせることはありません。Getter
Setter
LensM'
おそらく次のようなものを使用Lens' (Entity, State) Value
できますが、これをより良い方法で行う方法 (および場合) に興味があります。
わかりました...ここに私が得たものがあります:
基本的に私は使用できますentityAddress entity
(これはタイプである必要がありますがEntity -> Lens' EntitySystem Address
、ghcは不平を言っています)。しかし、これは「レンズっぽい」とは感じません。私が望んでいるentityAddress :: Lens' Entity Address
のは、エンティティ システムのすべてのステートフルな処理がユーザーから隠されているようなものです。
haskell - Control.Lens で IndexedTraversal を使用して、各要素に対してインデックス対応アクションを実行するにはどうすればよいですか?
IndexedTraversal
(パッケージから)がControl.Lens
あり、その中の各要素にインデックス対応のモナド アクションを適用したいと考えています。残念ながら、このようなことを行う便利な方法 (関数^!
と組み合わせるなど) はすべてact
、各要素のインデックスを無視しているようです。インデックス付きトラバーサルですべての要素 (およびそのインデックス) に対してアクションを実行する良い方法はありますか?
haskell - Lens' ab を Lens' a (たぶん b) に変換する
次のようないくつかのデータ構造があります
そこで、簡単に作成できるように単純な型クラスを作成することにしました
しかし、これらの構造の一部に対応するフィールドがオプションとしてあるという問題に遭遇しました
そして今、型クラスを使用できなくなりました。そのフィールドがオプションではないデータ型とほぼ同じ数のデータ型があるため、型クラスを変更する方がよいと判断しました。
しかし、私はレンズ ライブラリの経験があまりないので、この新しいレンズをData1
およびの型で機能させる方法を考え出すのに苦労していますData2
。理想的には、それを表示してMaybe Int
任意のタイプの値を取得できるようにしたいと思います。設定するときJust x
は、フィールドをx
forData1
とに設定しData2
、渡されたときにこれら 2 つのタイプの操作を行わないようにしたいと考えていNothing
ます。
これは既存のコンビネータを使用して可能ですか、それとも自分でレンズを作成する必要がありますか? 私はそうしても問題ありませんが、既存のチュートリアルの大半は TH を使用しており、手書きでの記述の詳細については触れていません。
GHC 7.6.3 とlens
3.10 を使用しています。