barbies-th-0.1.11: Create strippable HKD via TH
Safe HaskellSafe-Inferred
LanguageHaskell2010

Barbies.TH

Synopsis

Documentation

class FieldNamesB b where Source #

barbies doesn't care about field names, but they are useful in many use cases

Methods

bfieldNames :: IsString a => b (Const a) Source #

A collection of field names.

bnestedFieldNames :: IsString a => b (Const (NonEmpty a)) Source #

A collection of field names, prefixed by the names of the parent.

data LensB b a Source #

A pair of a getter and a setter Not van Laarhoven to avoid dictionary passing

Constructors

LensB 

Fields

  • viewB :: forall h. b h -> h a
     
  • setB :: forall h. h a -> b h -> b h
     

getLensB :: Functor f => LensB b a -> (h a -> f (h a)) -> b h -> f (b h) Source #

Obtain a van-laarhoven lens (compatible with the lens library) from LensB

class AccessorsB b where Source #

The class of higher-kinded datatypes where lenses can be defined

Methods

baccessors :: b (LensB b) Source #

A collection of lenses (getter-setter pairs)

declareBareB :: DecsQ -> DecsQ Source #

Transform a regular Haskell record declaration into HKD form. BareB, FieldNamesB, FunctorB, DistributiveB, TraversableB, ApplicativeB and ConstraintsB instances are derived.

For example,

declareBareB [d|data User = User { uid :: Int, name :: String}|]

becomes

data User t f = User { uid :: Wear t f Int, name :: Wear t f String }

declareBareBWith :: DeclareBareBConfig -> DecsQ -> DecsQ Source #

Generate a higher-kinded data declaration using a custom config

declareBareBWithOtherBarbies :: [Name] -> DecsQ -> DecsQ Source #

Like declareBareB except that one can specify the Names of other barbies. Members with these types won't be wrapped with Wear.

passthroughBareB :: DecsQ -> DecsQ Source #

Defines a synonym for the bare type with the same name. The strippable definition is suffixed by B, and the covered type is suffixed by H.