@hackage generic-labels0.1.0.1

Generically extract and replace collections of record fields

Handle various conversion operations between record types, such as projecting out a collection of fields from a record, or plugging in values for a subset of the fields of a larger record.

Works both with built-in Haskell records, as well as explicitly labelled types ( #label := value ) :: ( "label" := Type ) .

Project out a smaller record using project:

  data IBXD x = IBXD { i :: Int, b :: Bool, x :: x, d :: Double }
    deriving stock Generic
  data XI x = XI { x :: x, i :: Int }
    deriving stock Generic
  ibxd_to_xi :: IBXD x -> XI x
  ibxd_to_xi = project

Plug in a subset of fields using inject:

  xi_into_ibxd :: XI x -> IBXD x -> IBXD x
  xi_into_ibxd = inject

Create a record out of two collections of arguments using adapt:

  xi_plus_bd_makes_ibxd :: XI x -> ( "b" := Bool, "d" := Double ) -> IBXD x
  xi_plus_bd_makes_ibxd = adapt

See also the library's readme.