{-# LANGUAGE DataKinds, DeriveGeneric, TypeApplications, TypeOperators #-} {-# OPTIONS_GHC -Wno-unused-top-binds #-} import GHC.Generics (Generic) import Test.Tasty import Test.Tasty.HUnit import Data.Generics.Product (field) import Data.Generics.Internal.VL.Lens import Generic.Data.Surgery (onData, toData) data T a = R { f :: a } deriving (Generic, Show) main :: IO () main = defaultMain test show' :: Show (f ()) => f () -> String show' = show test :: TestTree test = testGroup "lens-surgery" [ testCase "update" $ "R {f = 42}" @?= (show' . onData (field @"f" .~ (42 :: Int)) . toData) (R ()) ]