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

haskell - レンズのリストを生成するには?

オブジェクトのリストがあるコードに共通のパターンがあり、それらを関数に渡してchooseユーザーに選択させます。

ただし、選択した要素にアクセスするにはパーシャルを使用する必要があるため、 を返すのIntは残念です。(!!)これを避けるために、私は

ここで、リストの各要素にアクセスするためのレンズのリストを渡します。そうすれば、実際に存在するかどうかを気にせずに、レンズの反対側にあるオブジェクトを変更しても安全だと確信できます。

このようなレンズのリストを作成するにはどうすればよいですか? 効果的に、私は必要です

おまけとして、より一般的なもの

トラバーサルがアクセスする各ポイントのレンズを作成することも素晴らしいでしょう

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

haskell - Control.Lens からいくつかの Getter を使用して関数を呼び出すクリーンな方法は何ですか。

レンズが定義されたデータ構造があるとします。たとえば、次のようになります。

そして、いくつかのゲッターを使用して呼び出したい関数があるとします。たとえば、次のようになります。

現時点では、各フィールドにアクセスするためにかっこを使用すると、多くの醜さが生じます。次に例を示します。

他のほとんどの状況でのライブラリの簡潔さを考えると、lensもう少しエレガントなものを望んでいましたが、この特定のケースに役立つコンビネータが見つかりません。

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

haskell - Haskell のレンズにおけるセッターとゲッターの型の違い

私は、data type Gフィールドを持っている を持っています_repr :: Data.Graph.Inductive.Gr String StringGr通常、新しいノードをグラフに追加するときLNode aは、基本的に のタプルとして定義されるオブジェクトを提供する必要があります(Int, a)。ここで、Int はグラフのノード インデックスです。以下の関数の例を参照してくださいadd

インデックスを自動的に計算する関数を実装したいと思いaddxます(たとえば、Data.Graph.Inductive.newNodes関数を使用して)。addxの署名が必要で、addx :: String -> G -> Intこの関数は新しいフリー インデックスを計算し、グラフ G を変更して、この計算されたインデックスを返します。Gレンズなどを使用して、Haskellでそのような関数(この場合は既存のオブジェクトを変更します)を作成することは可能ですか?

Haskell lens は次のように定義されておりlens :: (a -> c) -> (a -> d -> b) -> Lens a b c d、lens は基本的に「ゲッター」と「セッター」であるため、その署名により、さまざまなタイプのゲッター出力 ( c)、セッター値 ( d)、およびセッター出力 ( b) が許可されることがわかりました。

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

haskell - 存在型でレンズを使用できないことを回避するにはどうすればよいですか?

私は Edward Kmett のレンズライブラリを初めて使用しています。

[1] の質問は、存在量指定子が makeLenses を妨害することを説明しています。私はむしろ、何らかの形でレンズを使って実存的なものを使いたいと思っています.

背景として、私はクラスを持っています:

実際の質問については、次のタイプが必要です。

そして、私は次の行に沿って何かを書きたいと思っています:

[1] で説明した理由により、これは機能しません。でコンパイルして GHC にデバッグ情報を求めると-ddump-splices、次のようになります。

スプライス自体は空白です。これは、スプライスによって宣言が生成されないことを示しています。[1] を読んだ今、この部分を期待し、理解しています。

私が知りたいのは、これを行う方法です-問題を回避するにはどうすればよいですか? これで上流に泳がないようにするにはどうすればよいですか? 合成レンズのパスを介して構造の任意の部分にアクセスできるようにしたいのですが、 などのタイプの他のタイプのフィールドがあるため、レンズSet AnyFileで のコンテンツにアクセスできない限りアクセスできませんAnyFile

[1]存在量指定子はテンプレート Haskell (makeLenses) を暗黙のうちに混乱させます。なんで?

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

haskell - GHCi のレコードからレンズを作成するにはどうすればよいですか?

Lens図書館でちょっと遊んでみたい。それを GHCi にロードし、適切なアンダースコアを使用してレコード データ型を作成しました。

テンプレートをFoo使用するためのレンズを作りたいです。Template-Haskell docsmakeLensesのセット全体を読む必要なく、これを行いたいと思います。

これを機能させるには、GHCi プロンプトでどのような呪文を入力すればよいですか?

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

haskell - Haskell の Lens ライブラリの `ix` と `at` の違いは何ですか

私が知っているのは、一方が機能し、もう一方が機能しないということだけです。

コンテキスト:別のデータ構造へのFを含む 1 つのデータ構造があります。私の目標は、与えられたとのフィールドを記述するを構築することでした。Data.Map.Map k SSLensFkS

問題は、キーkがマップに存在しない可能性があることです。関数がその戻り値を Maybe でラップできることは問題ありません。ただし、を使用して Maybe を介してレンズを伝播できませんでしたat。多くのスタック オーバーフローの回答を読んだ後、私はこれに出くわしました

に置き換えるatix、型の問題が解決たことがわかりまし(^.)(^?)

Question: It seems like at and ix do the same thing, at least with regard to Map. Both take a key and give a 'Lens' to the value at that key. However, ix seems to play nice with the function composition operator (.). What is the difference between the two?


Off Topic Rant:

I like infix operators as much as the next guy but the Control.Lens package seems to have gone a little overboard. For a new user having some English names and a key somewhere would lower the learning curve. Due to the huge number of wrapper classes used in the Lens library it is particularly difficult to dig through the type signatures if you don't already know what is going on. My code is starting to look like Perl for heaven sake.

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

haskell - Lens の欠落している State Combinator を検索しています

現在、次のようなコードがあります。

fooaLensFooフィールドに、runFoo :: MonadState m => Foo -> m Foo

この操作を1行で行う方法があるはずだと思いますが、見つかりません。次のようなコメントが必要だと思います。

質問:

  • そのようなコンビネータは存在しますか?もしそうなら、それは何ですか?
  • このような別の質問に出くわしたとき、それを検索する最善の方法は何ですか (つまり、通常はこれを Hoogle に入力するだけですが、レンズ ライブラリでそれを行うのはうまくいきませんでした)。
  • これは実際には Control.Monad にあるプリミティブ コンビネータですか? (これがクライスリの矢のまた別の仕事だったらちょっと恥ずかしい)
0 投票する
1 に答える
1849 参照

list - Haskell リストと Control.Lens

単純な「動的型付け」言語用の AST ライブラリを作成しています。構文ツリーとパーサーを作成しました。現在、私は AST の操作に取り組んでおり、その目的で lens パッケージを使用することに興味があります。

検討

オブジェクト フィールドを操作するレンズを非常に簡単に作成できます。

しかし、Arr 要素を操作するためにどこから始めればよいかわかりません。次のようなレンズが欲しいです:

便宜上、Obj 表現を変更しますが、レンズを使用してリストにインデックスを付ける方法を知っておくと役立ちます。