generic-data-0.4.0.0: test/lens-surgery.hs
{-# LANGUAGE
DataKinds,
DeriveGeneric,
TypeApplications,
TypeOperators #-}
{-# OPTIONS_GHC -Wno-unused-top-binds #-}
import Data.Coerce (coerce)
import Data.Functor.Identity (Identity(..))
import GHC.Generics (Generic)
import Test.Tasty
import Test.Tasty.HUnit
import Data.Generics.Product (field_)
import Generic.Data (gshowsPrec, Opaque(Opaque))
import Generic.Data.Microsurgery (onData, toData)
data T = R { f :: Int -> Int } deriving Generic
instance Show T where
showsPrec n = gshowsPrec n
. onData (field_ @"f" %~ Opaque)
. toData
(%~) :: ((a -> Identity b) -> s -> Identity t) -> (a -> b) -> s -> t
(%~) = coerce
main :: IO ()
main = defaultMain test
test :: TestTree
test = testGroup "lens-surgery"
[ testCase "update" $
"R {f = _}" @?= show (R id)
]