@@ -12,8 +12,10 @@ module JRec
1212where
1313
1414import Control.Lens ((&), (.~), (^.), coerced)
15−import qualified Data.Generics.Product.Fields as GL
16−import qualified Data.Generics.Wrapped as GL
15+import qualified "generic-lens" Data.Generics.Product.Fields as GL
16+import qualified "generic-lens" Data.Generics.Wrapped as GL
17+import qualified "generic-optics" Data.Generics.Product.Fields as GO
18+import qualified "generic-optics" Data.Generics.Wrapped as GO
1719import Data.Proxy
1820import GHC.Exts (Any)
1921import GHC.Generics
@@ -90,6 +92,17 @@ instance {-# OVERLAPPING #-} (R.Set field fields a' ~ fields', R.Set field field
9092instance {-# OVERLAPPING #-} (R.Set field fields a ~ fields, R.Has field fields a) => GL.HasField' field (Rec fields) a where
9193 field' = R.lens (R.FldProxy @field)
9294
95+----------------------------------------------------------------------------
96+-- generic-optics
97+----------------------------------------------------------------------------
98+
99+instance {-# OVERLAPPING #-} (R.Set field fields a' ~ fields', R.Set field fields' a ~ fields, R.Has field fields a, R.Has field fields' a') => GO.HasField field (Rec fields) (Rec fields') a a' where
100+ field = R.opticLens (R.FldProxy @field)
101+
102+instance {-# OVERLAPPING #-} (R.Set field fields a ~ fields, R.Has field fields a) => GO.HasField' field (Rec fields) a where
103+ field' = R.opticLens (R.FldProxy @field)
104+
105+
93106pattern Rec ::
94107 ( RecTuple tuple fields
95108 ) =>