{-# LANGUAGE DataKinds #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE TypeApplications #-} {-# OPTIONS_GHC -funfolding-keeness-factor=100 #-} module Main (module Main) where import Data.Generics.Lens.Lite (field) import GHC.Generics (Generic) main :: IO () main = return () ------------------------------------------------------------------------------- -- Big record ------------------------------------------------------------------------------- data Ex = Ex { exA :: Int , exB :: Bool , ex0 :: Char , ex1 :: Char , ex2 :: Char , ex3 :: Char , ex4 :: Char , ex5 :: Char , ex6 :: Char , ex7 :: Char , ex8 :: Char , ex9 :: Char } deriving (Generic) _exA :: Functor f => (Int -> f Int) -> Ex -> f Ex _exA = field @"exA" _exB :: Functor f => (Bool -> f Bool) -> Ex -> f Ex _exB = field @"exB" _ex4 :: Functor f => (Char -> f Char) -> Ex -> f Ex _ex4 = field @"ex4" ------------------------------------------------------------------------------- -- Sum of records ------------------------------------------------------------------------------- data Ex2 = Ex2A { exC :: Char } | Ex2B { exC :: Char } deriving (Generic) _exC :: Functor f => (Char -> f Char) -> Ex2 -> f Ex2 _exC = field @"exC"