packages feed

generic-lens-lite-0.1: example/Example.hs

{-# 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"