Giter Club home page Giter Club logo

Comments (10)

as-capabl avatar as-capabl commented on August 22, 2024 3

いろいろ調べてみたのですが、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.

as-capabl avatar as-capabl commented on August 22, 2024 1

なるほど、自分の書くコード間だったら、それでいけそうです。
ただ既にrio準拠で作られているライブラリを使う場合は、手書きが必要になってしまうという問題があります。

このボイラープレート嫌だよね、とは本家の方でも言われているみたいです
commercialhaskell/rio#113

from blog.

igrep avatar igrep commented on August 22, 2024 1

いいですね!
個人的には、多少タイプ数が多くても field @name などと書くつもりだったので、 Data.Generics.Labels については想定していませんでした。
#name でアクセスできるようにもしてくれてるんですね。
「Use at your own risk.」なのはgeneric-lens全体ではなく、このモジュールが IsLabel のorphanなインスタンスを定義してしまっているからではないかと。

タイトルを変更して「OverloadLabelsとgeneric-lensでストレスフリーなレコード型を」という記事にするのはどうでしょう(せっかくなので執筆してみたい)

ぜひぜひ! 👍

from blog.

as-capabl avatar as-capabl commented on August 22, 2024

とりあえず

  • rioのベストプラクティス をベースに
  • RecordWildCards はrio的には非推奨ですが有効にして
  • DuplicateRecordFields OverloadedLabels を有効にして
  • どこかのパッケージのIsLabelインスタンスを使って #member 等をgetterとして使えるようにする
  • rioのReaderTパターンで使う Has インスタンスを定義する

みたいなストーリーになると思っています。

from blog.

igrep avatar igrep commented on August 22, 2024

どこかのパッケージのIsLabelインスタンスを使って #member 等をgetterとして使えるようにする

generic-lensがいいでしょうね。Has のインスタンスも自分で定義する必要はないはず。

from blog.

igrep avatar igrep commented on August 22, 2024

RecordWildCards はrio的には非推奨ですが有効にして

せめて NamedFieldPuns にしません?

from blog.

as-capabl avatar as-capabl commented on August 22, 2024

Has のインスタンスも自分で定義する必要はないはず。

すいません、ものすごく飛躍しました。rioのHasインスタンスは、上記rioベストプラクティスの
When defining Has-style typeclasses から始まる節で触れられているやつです。

普通のlensを使う時は makeClassy をよく使うので、OverloadedLabelsに移行する時はどうしようかと悩んでいる所です。

from blog.

igrep avatar igrep commented on August 22, 2024

いや、それはわかるんですが、わざわざ手で定義しなくても十分 http://hackage.haskell.org/package/generic-lens-1.2.0.1/docs/Data-Generics-Product-Fields.html#t:HasField で代用できるのではないかなぁと思いまして。

from blog.

as-capabl avatar as-capabl commented on August 22, 2024

issueリンク入れると向こうのissueに表示されてしまう……

from blog.

debug-ito avatar debug-ito commented on August 22, 2024

だいぶ前のissueですみません。このトピック、かなり読んでみたいのですが・・・。

from blog.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.