@@ -12,8 +12,10 @@ module JRec
14import Control.Lens ((&), (.~), (^.), coerced)
14import Control.Lens ((&), (.~), (^.), coerced)
15−import qualified Data.Generics.Product.Fields as GL
15+import qualified "generic-lens" Data.Generics.Product.Fields as GL
16−import qualified Data.Generics.Wrapped 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
17import Data.Proxy
19import Data.Proxy
18import GHC.Exts (Any)
20import GHC.Exts (Any)
19import GHC.Generics
21import GHC.Generics
@@ -90,6 +92,17 @@ instance {-# OVERLAPPING #-} (R.Set field fields a' ~ fields', R.Set field field
90instance {-# OVERLAPPING #-} (R.Set field fields a ~ fields, R.Has field fields a) => GL.HasField' field (Rec fields) a where
92instance {-# OVERLAPPING #-} (R.Set field fields a ~ fields, R.Has field fields a) => GL.HasField' field (Rec fields) a where
91 field' = R.lens (R.FldProxy @field)
93 field' = R.lens (R.FldProxy @field)
95+----------------------------------------------------------------------------
97+----------------------------------------------------------------------------
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)
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)
93pattern Rec ::
106pattern Rec ::
94 ( RecTuple tuple fields
107 ( RecTuple tuple fields