haskell-jp / questions #105 at 2023-11-13 13:43:48 +0900

data とレコード構文で定義した、一つだけコンストラクタを持つ型について、コンストラクタの各引数へのアクセサとなるLensを勝手に導出してくれるような方法はありますか?
Hiromi ISHII / mr_konn
lens パッケージの Control.Lens.TH で定義されているmakeLenses などのマクロを使って定義を生成させるか、
https://hackage.haskell.org/package/lens-5.2.3/docs/Control-Lens-TH.html

generic-lens パッケージと OverloadedLabels 言語拡張を使って #hogeField みたいな構文で自動でレンズ/プリズムを生成してもらう方法がメジャーでしょうか
https://hackage.haskell.org/package/generic-lens

OverloadedLabels に抵抗がなければ generic-lens が便利(マクロではなく定義順が制約されることがないので)ですが、generic-lens のレンズを複数合成すると場合によっては多相性が邪魔をして上手く推論してくれない場合もあります。用途に応じて使い分ける形かなと