| Copyright | (C) 2017 Csongor Kiss | 
|---|---|
| License | BSD3 | 
| Maintainer | Csongor Kiss <[email protected]> | 
| Stability | experimental | 
| Portability | non-portable | 
| Safe Haskell | None | 
| Language | Haskell2010 | 
Data.Generics.Product.Fields
Contents
Description
Derive record field getters and setters generically.
Lenses
Running example:
>>>:set -XTypeApplications>>>:set -XDataKinds>>>:set -XDeriveGeneric>>>:set -XGADTs>>>:set -XFlexibleContexts>>>import GHC.Generics>>>:m +Data.Generics.Internal.VL.Lens>>>:m +Data.Function>>>:{data Human a = Human { name :: String , age :: Int , address :: String , other :: a } | HumanNoAddress { name :: String , age :: Int , other :: a } deriving (Generic, Show) human :: Human Bool human = Human { name = "Tunyasz", age = 50, address = "London", other = False } :}
class HasField (field :: Symbol) s t a b | s field -> a, t field -> b, s field b -> t, t field a -> s where Source #
Records that have a field with a given name.
Minimal complete definition
Methods
field :: Lens s t a b Source #
A lens that focuses on a field with a given name. Compatible with the
  lens package's Lens type.
>>>human ^. field @"age"50
Type changing
>>>:t humanhuman :: Human Bool
>>>:t human & field @"other" .~ (42 :: Int)human & field @"other" .~ (42 :: Int) :: Human Int
>>>human & field @"other" .~ 42Human {name = "Tunyasz", age = 50, address = "London", other = 42}
Type errors
>>>human & field @"weight" .~ 42... ... The type Human Bool does not contain a field named 'weight'. ...
>>>human & field @"address" .~ ""... ... Not all constructors of the type Human Bool ... contain a field named 'address'. ... The offending constructors are: ... HumanNoAddress ...
Instances
| (Generic s, ErrorUnless field s (CollectField field (Rep s)), Generic t, s' ~ Proxied s, t' ~ Proxied t, Generic s', Generic t', GLens' (HasTotalFieldPSym field) (Rep s') a', GLens' (HasTotalFieldPSym field) (Rep t') b', GLens (HasTotalFieldPSym field) (Rep s) (Rep t) a b, t ~ Infer s a' b, s ~ Infer t b' a) => HasField field s t a b Source # | |
Defined in Data.Generics.Product.Fields  | |