Comments (10)
いろいろ調べてみたのですが、generic-lensのヘッダに "Use at your own risk." などと書かれているのを鑑みるに、まだベストプラクティスと呼ぶには成熟していないと考えた方がいいと思います。
https://hackage.haskell.org/package/generic-lens-1.2.0.1/docs/Data-Generics-Labels.html
とはいえOverloadedLabelsによるレコード操作は今後主流になっていくであろう機能なので、タイトルを変更して「OverloadLabelsとgeneric-lensでストレスフリーなレコード型を」という記事にするのはどうでしょう(せっかくなので執筆してみたい)
from blog.
なるほど、自分の書くコード間だったら、それでいけそうです。
ただ既にrio準拠で作られているライブラリを使う場合は、手書きが必要になってしまうという問題があります。
このボイラープレート嫌だよね、とは本家の方でも言われているみたいです
commercialhaskell/rio#113
from blog.
いいですね!
個人的には、多少タイプ数が多くても field @name
などと書くつもりだったので、 Data.Generics.Labels
については想定していませんでした。
#name
でアクセスできるようにもしてくれてるんですね。
「Use at your own risk.」なのはgeneric-lens全体ではなく、このモジュールが IsLabel
のorphanなインスタンスを定義してしまっているからではないかと。
タイトルを変更して「OverloadLabelsとgeneric-lensでストレスフリーなレコード型を」という記事にするのはどうでしょう(せっかくなので執筆してみたい)
ぜひぜひ! 👍
from blog.
とりあえず
- rioのベストプラクティス をベースに
RecordWildCards
はrio的には非推奨ですが有効にしてDuplicateRecordFields
OverloadedLabels
を有効にして- どこかのパッケージのIsLabelインスタンスを使って
#member
等をgetterとして使えるようにする - rioのReaderTパターンで使う
Has
インスタンスを定義する
みたいなストーリーになると思っています。
from blog.
どこかのパッケージのIsLabelインスタンスを使って #member 等をgetterとして使えるようにする
generic-lensがいいでしょうね。Has
のインスタンスも自分で定義する必要はないはず。
from blog.
RecordWildCards はrio的には非推奨ですが有効にして
せめて NamedFieldPuns
にしません?
from blog.
Has のインスタンスも自分で定義する必要はないはず。
すいません、ものすごく飛躍しました。rioのHasインスタンスは、上記rioベストプラクティスの
When defining Has-style typeclasses から始まる節で触れられているやつです。
普通のlensを使う時は makeClassy をよく使うので、OverloadedLabelsに移行する時はどうしようかと悩んでいる所です。
from blog.
いや、それはわかるんですが、わざわざ手で定義しなくても十分 http://hackage.haskell.org/package/generic-lens-1.2.0.1/docs/Data-Generics-Product-Fields.html#t:HasField で代用できるのではないかなぁと思いまして。
from blog.
issueリンク入れると向こうのissueに表示されてしまう……
from blog.
だいぶ前のissueですみません。このトピック、かなり読んでみたいのですが・・・。
from blog.
Related Issues (20)
- 全文検索の追加 HOT 4
- デプロイ時に必ずCircleCIがエラーを起こす
- Copyrightの日付表示について HOT 3
- Haskell-jp Times 的なのを書きたい HOT 1
- Haskell Day 2018の発表を掲載したログミーの記事まとめ HOT 1
- slack-logをHTMLに変換したことについてアナウンス
- [Topic Request] Strict拡張を使用する際の注意点 HOT 14
- 文字列をドラッグアンドドロップで選択したときの色がアクセントの色に合っていない HOT 1
- 帰ってきたArrow
- Reddit の埋め込みボタンが動作していない?
- 相互リンク作成依頼:(roki.log) HOT 4
- Google Analyticsの廃止
- GitHub Actionsへの移行 HOT 1
- GHC9.0.1からユーザーガイドのリンクが一部変更されてる HOT 1
- haskell-jp-bot の通知を受け取りたくない HOT 9
- Topic Request: 誤解から学ぶモナド HOT 3
- haskell-jp-bot のGitHub Personal Access Token HOT 1
- haskell-jp-blog-artifactの廃止
- デプロイ時に使用するSSHの鍵が無効になってる
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from blog.