@hackage / generic-labels

Generically extract and replace collections of record fields

Latest0.1.0.1

About

Metadata

  • Last updated , by sheaf
  • License BSD-3-Clause
  • Categories Generics
  • Maintained by: Sam Derbyshire

  • Lottery factor: 0

Links

Installation

Readme

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.