問題タブ [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 - レンズを使用して複数のフィールドを読み取る
タイプを考えると
パターン マッチングを使用して、誰かの名前、ランク、およびシリアル番号を抽出できます。
または、レンズを使用して各部分を個別に抽出することもできます
データ構造の 1 回の走査で 3 つすべてを同時に抽出する方法はありますか?
Getter
を組み合わせる何らかのGetter s a -> Getter s b -> Getter s (a,b)
方法
haskell - レコード構文を使用して Haskell で OOP スタイルの「セッター」関数を作成する
私はレンズに関するチュートリアルを読んでいます。導入部で、著者は、lens
標準の Haskell を使用して OOP スタイルの「セッター」/「ゲッター」を実装する方法のいくつかの例を示して、コンセプトの動機付けをしています。次の例で混乱しています。
User
図 1 (下記) のように代数データ型を定義するとしましょう。NaiveLens
チュートリアルでは、データ型と関数を使用して "セッター" 機能を実装できると (正しく) 述べていnameLens
ます (図 1 も参照)。使用例を図 2 に示します。
次の(やや明白な)関数が同じようにうまく機能するように見えるのに、なぜ「セッター」機能を実装するためにそのような精巧な構造(つまり、NaiveLens
データ型と関数)が必要なのか、私は困惑しています。 nameLens
set' a s = s {name = a}
ただし、私の「明白な」関数が の一部であるラムダ関数に他ならないことを考えると、nameLens
以下の構成を使用することには確かに利点があると思いますが、密度が高すぎてその利点が何であるかを確認できません。Haskell ウィザードの 1 人が理解を助けてくれることを願っています。
図 1 (定義):
図 2 (使用例):
haskell - xml-lens API の驚き: 関数の合成と旅行記
次の式は、その意図がどのように異なるのでしょうか? 以下の例では、実際にチェックを入力して異なる結果を生成していることに驚いています。
と
そして、それらが典型的な pom.xml ファイルでどのように機能するか:
どこ
と
arrays - 配列とインデックスの両方が State にある場合、配列のインデックス付けにレンズを使用する
状態モナドに配列と配列インデックスがあります。を使用して idx を読み取り、他の同様の修飾子use
を使用して変更できます。+=
今、私は結合arr
しidx
てレンズを形成したいと考えていますarr[idx]
:
これどうやってするの?のコードは異なりData.Sequence
ますか?
haskell - レンズ ライブラリを使用した複雑な機能の構築
lens
引数を持ち、 type の 2 つの適用効果をmconcat
持つMaybe
モノイドになる関数を実装しようとしています(->) r
。おそらくいくつかの基本が欠けているので、この問題を分解するための助けをいただければ幸いです。
次のように、同じ引数を渡さないように「ユーザー」コードを書きたいと思います。
これが私が試したものです。レンズなしのコンセプト:
レンズ付き:
しかし、コンパイルに失敗します:
haskell - トラバースを使用した Haskell レンズのチュートリアル
私はこのチュートリアルに従おうとしています: http://blog.jakubarnold.cz/2014/08/06/lens-tutorial-stab-traversal-part-2.html
ghci にロードする次のコードを使用しています。
そこから、次のような単純なものが機能します。
ただし、次のステップを実行しようとすると機能しません。
私は得る:
Lens には Functor の型制約があり、traverse には Applicative として f により制約された型制約があることがわかります。これが正確に機能しないのはなぜですか? また、ブログのチュートリアルで機能することが示唆されているのはなぜですか?