generics-sop-0.5.1.4: Generic Programming using True Sums of Products

Safe Haskell | None
Language | Haskell2010

Generics.SOP.GGP

Description

Derive `generics-sop` boilerplate instances from GHC's `Generic`.

The technique being used here is described in the following paper:

- José Pedro Magalhães and Andres Löh. Generic Generic Programming. Practical Aspects of Declarative Languages (PADL) 2014.

Synopsis

- type GCode a = ToSumCode (Rep a) ('[] :: [[Type]])
- type GFrom a = GSumFrom (Rep a)
- type GTo a = GSumTo (Rep a)
- type GDatatypeInfo a = DemoteDatatypeInfo (GDatatypeInfoOf a) (GCode a)
- type GDatatypeInfoOf a = ToInfo (Rep a)
- gfrom :: (GFrom a, Generic a) => a -> SOP I (GCode a)
- gto :: (GTo a, Generic a) => SOP I (GCode a) -> a
- gdatatypeInfo :: forall proxy a. GDatatypeInfo a => proxy a -> DatatypeInfo (GCode a)

# Documentation

type GCode a = ToSumCode (Rep a) ('[] :: [[Type]]) Source #

Compute the SOP code of a datatype.

This requires that `Rep` is defined, which in turn requires that the type has a `Generic` (from module GHC.Generics) instance.

This is the default definition for `Code`. For more info, see `Generic`.

type GFrom a = GSumFrom (Rep a) Source #

Constraint for the class that computes `gfrom`.

type GTo a = GSumTo (Rep a) Source #

Constraint for the class that computes `gto`.

type GDatatypeInfo a = DemoteDatatypeInfo (GDatatypeInfoOf a) (GCode a) Source #

Constraint for the class that computes `gdatatypeInfo`.

type GDatatypeInfoOf a = ToInfo (Rep a) Source #

Compute the datatype info of a datatype.

Since: 0.3.0.0

gfrom :: (GFrom a, Generic a) => a -> SOP I (GCode a) Source #

An automatically computed version of `from`.

This requires that the type being converted has a `Generic` (from module GHC.Generics) instance.

This is the default definition for `from`. For more info, see `Generic`.

gto :: (GTo a, Generic a) => SOP I (GCode a) -> a Source #

An automatically computed version of `to`.

This requires that the type being converted has a `Generic` (from module GHC.Generics) instance.

This is the default definition for `to`. For more info, see `Generic`.

gdatatypeInfo :: forall proxy a. GDatatypeInfo a => proxy a -> DatatypeInfo (GCode a) Source #

An automatically computed version of `datatypeInfo`.

This requires that the type being converted has a `Generic` (from module GHC.Generics) instance.

This is the default definition for `datatypeInfo`. For more info, see `HasDatatypeInfo`.