Generics.SOP.GGP

generics-sop-0.2.0.0: 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 GFrom a = GSumFrom (Rep a)
- type GTo a = GSumTo (Rep a)
- type GDatatypeInfo a = GDatatypeInfo' (Rep a)
- gfrom :: (GFrom a, Generic a) => a -> SOP I (GCode a)
- gto :: forall a. (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) `[]`

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)

Constraint for the class that computes `gfrom`.

type GTo a = GSumTo (Rep a)

Constraint for the class that computes `gto`.

type GDatatypeInfo a = GDatatypeInfo' (Rep a)

Constraint for the class that computes `gdatatypeInfo`.

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

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 :: forall a. (GTo a, Generic a) => SOP I (GCode a) -> a

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)

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`.