問題タブ [lenses]
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 - Haskell の「関数合成を使用してレンズを合成する」という奇妙な引数の順序をどのように実装できますか?
A wreq tutorialを読んでいます:
レンズは、Haskell 値の一部に焦点を当てる方法を提供します。たとえば、
Response
型にはresponseStatus
レンズがあり、サーバーから返されるステータス情報に焦点を当てています。この
^.
演算子は、最初の引数として値を、2 番目の引数としてレンズを取り、レンズによってフォーカスされた値の部分を返します。関数合成を使用してレンズを構成します。これにより、深く入れ子になった構造の一部に簡単に焦点を合わせることができます。
この引数の順序で行われる関数合成が、入れ子構造をその順序でどのように処理できるかを思いつくことはできません。
見てください:またはr ^. responseStatus . statusCode
のいずれr ^. (responseStatus . statusCode)
か(r ^. responseStatus) . statusCode
です。
最初のものは、最初に処理する関数を構築しstatusCode
(レコードから取得しStatus
ますか?-表示された値から推測できるようにStatus {statusCode = 200, statusMessage = "OK"}
)、次にresponseStatus
応答ステータスを処理する必要がある関数に渡します。つまり、逆です。実際には、ステータス コードは応答ステータスの一部です。
2番目の読み取りも、ステータスコードを最初に処理するため、意味がありません。
haskell - 制約のあるデータに対する makeLenses (DatatypeContexts)
makeLenses
制約付きのデータ型でテンプレートを使用できますか? できる場合、その方法は? Template Haskellについてすべて読まずに、そうしたいと思います。
GHC には次の例があります。
これにより、次のコンパイル エラーが発生します。
だから私はそれが生成したと思います:
私も試してみましmakeFields
たmakeClassy
が、役に立ちませんでした。
私はこれを回避できることを知っています:
makeLenses
しかし、テンプレート Haskellでそれを行う方法はありますか?
GHC バージョン 7.8.4 とlens
バージョン 4.8 を使用しています。
(注: makeLenses について同様の質問があったことは知っていますが、それでも機能させることができませんでした。私は haskell の初心者です。)
haskell - レンズを使用してトラバースし、マップ内の一部の (すべてではない) 要素に割り当てる方法
レンズとコンテナを一緒に使用していくつかの成功を収めようとしましたが、Data.Map のフィルタリング トラバーサルを使用しようとして理解の限界に達しました。マップ内の個々のインスタンスを変更したり、すべてのインスタンスをトラバースしたりできますが、できません。識別可能なパーティション (つまり、範囲内のキー) を操作する方法を考え出します。
基本的に、Gabriel Gonzalez の優れたレンズ チュートリアルがリストで行うことと同様のことをマップで実行しようとしています [1]。
traverseSome
これは、コメントアウトされた書き方がわからない関数を使用した私のコードの作業スケルトンです。どんな助けもありがたく受け取った!
[1] http://www.haskellforall.com/2013/05/program-imperatively-using-haskell.html
scala - Scalaz Lens から ReaderWriterState へ
与えられた、言う
どうやって思いつくのですか:
ageL
レンズを活かしながら。Scalaz Lens には から を作成するユーティリティがいくつかありますがState
、Lens
それを に変換する方法がわかりませんReaderWriterState
。