generic-records-0.2.0.0: Magic record operations using generics

Copyright(C) 2017 Csongor Kiss
LicenseBSD3
MaintainerCsongor Kiss <kiss.csongor.kiss@gmail.com>
Stabilityexperimental
Portabilitynon-portable
Safe HaskellSafe
LanguageHaskell2010

Records.Generic.HasField

Contents

Description

Derive record field getters and setters generically.

Synopsis

Lens

  module Example where

  import GHC.Generics
  import Record.Generic

  data Human = Human
    { name    :: String
    , age     :: Int
    , address :: String
    } deriving (Generic, Show)

   human :: Human
   human = Human "Tunyasz" 50 "London"

class HasField field a s | s field -> a where Source #

Records that have a field with a given name.

Minimal complete definition

label

Methods

label :: Lens' s a Source #

Lens focusing on a field with a given name. Compatible with the lens package.

 type Lens' s a
   = forall f. Functor f => (a -> f a) -> s -> f s
>>> human & label @"name" .~ "Tamas"
Human {name = "Tamas", age = 50, address = "London"}

Instances

(Generic s, (~) (Maybe Type) (Contains field (Rep s)) (Just Type a), GHasField field (Rep s) a) => HasField field a s Source #

Instances are generated on the fly for all records that have the required field.

Methods

label :: Lens' s a Source #

Getter and setter functions

getField :: forall field a s. HasField field a s => s -> a Source #

Get field

>>> getField @"name" human
"Tunyasz"

setField :: forall field a s. HasField field a s => a -> s -> s Source #

Set field

>>> setField @"age" (setField @"name" "Tamas" human) 30
Human {name = "Tamas", age = 30, address = "London"}

Internals

class GHasField field s a | field s -> a where Source #

Like HasField, but on the generic representation

Minimal complete definition

glabel

Methods

glabel :: Lens' (s x) a Source #

Instances

GHasField field (K1 R a) a Source # 

Methods

glabel :: Functor f => (a -> f a) -> K1 R a x -> f (K1 R a x) Source #

GHasField field (S1 (MetaSel (Just Symbol field) p f b) (Rec0 a)) a Source # 

Methods

glabel :: Functor f => (a -> f a) -> S1 (MetaSel (Just Symbol field) p f b) (Rec0 a) x -> f (S1 (MetaSel (Just Symbol field) p f b) (Rec0 a) x) Source #

GHasFieldProd Symbol field s s' a (Contains field s) => GHasField field ((:*:) s s') a Source # 

Methods

glabel :: Functor f => (a -> f a) -> (s :*: s') x -> f ((s :*: s') x) Source #

GHasField field s a => GHasField field (M1 C c s) a Source # 

Methods

glabel :: Functor f => (a -> f a) -> M1 C c s x -> f (M1 C c s x) Source #

GHasField field s a => GHasField field (M1 D c s) a Source # 

Methods

glabel :: Functor f => (a -> f a) -> M1 D c s x -> f (M1 D c s x) Source #