vinyl-0.14.3: Extensible Records
Safe HaskellNone
LanguageHaskell2010

Data.Vinyl

Synopsis

Documentation

class RecMapMethod c f ts where Source #

Apply a typeclass method to each field of a Rec where the class constrains the index of the field, but not its interpretation functor.

Methods

rmapMethod :: (forall a. c (PayloadType f a) => f a -> g a) -> Rec f ts -> Rec g ts Source #

Instances

Instances details
RecMapMethod c (f :: u -> Type) ('[] :: [u]) Source # 
Instance details

Defined in Data.Vinyl.Class.Method

Methods

rmapMethod :: (forall (a :: u0). c (PayloadType f a) => f a -> g a) -> Rec f '[] -> Rec g '[] Source #

(c (PayloadType f t), RecMapMethod c f ts) => RecMapMethod c (f :: a -> Type) (t ': ts :: [a]) Source # 
Instance details

Defined in Data.Vinyl.Class.Method

Methods

rmapMethod :: (forall (a0 :: u). c (PayloadType f a0) => f a0 -> g a0) -> Rec f (t ': ts) -> Rec g (t ': ts) Source #

class RecPointed c f ts where Source #

Generate a record from fields derived from type class instances.

Methods

rpointMethod :: (forall a. c (f a) => f a) -> Rec f ts Source #

Instances

Instances details
RecPointed c (f :: u -> Type) ('[] :: [u]) Source # 
Instance details

Defined in Data.Vinyl.Class.Method

Methods

rpointMethod :: (forall (a :: u0). c (f a) => f a) -> Rec f '[] Source #

(c (f t), RecPointed c f ts) => RecPointed c (f :: a -> Type) (t ': ts :: [a]) Source # 
Instance details

Defined in Data.Vinyl.Class.Method

Methods

rpointMethod :: (forall (a0 :: u). c (f a0) => f a0) -> Rec f (t ': ts) Source #

rmapMethodF :: forall c f ts. (Functor f, FieldPayload f ~ 'FieldId, RecMapMethod c f ts) => (forall a. c a => a -> a) -> Rec f ts -> Rec f ts Source #

Apply a typeclass method to each field of a Rec f ts using the Functor instance for f to lift the function into the functor. This is a commonly-used specialization of rmapMethod composed with fmap.

mapFields :: forall c ts. RecMapMethod c ElField ts => (forall a. c a => a -> a) -> FieldRec ts -> FieldRec ts Source #

Apply a typeclass method to each field of a FieldRec. This is a specialization of rmapMethod.

rtraverseInMethod :: forall c h f g rs. (RMap rs, RPureConstrained c rs, RApply rs) => (forall a. c a => f a -> g (ApplyToField h a)) -> Rec f rs -> Rec g (MapTyCon h rs) Source #

Like rtraverseIn, but the function between functors may be constrained.

rsequenceInFields :: forall f rs. (Functor f, AllFields rs, RMap rs) => Rec (f :. ElField) rs -> Rec ElField (MapTyCon f rs) Source #

Push an outer layer of interpretation functor into each named field.

data ARec (f :: k -> *) (ts :: [k]) Source #

An array-backed extensible record with constant-time field access.

Instances

Instances details
(is ~ RImage rs ss, IndexWitnesses is, NatToInt (RLength rs)) => RecSubset (ARec :: (k -> Type) -> [k] -> Type) (rs :: [k]) (ss :: [k]) is Source # 
Instance details

Defined in Data.Vinyl.ARec.Internal

Associated Types

type RecSubsetFCtx ARec f Source #

Methods

rsubsetC :: forall g (f :: k0 -> Type). (Functor g, RecSubsetFCtx ARec f) => (ARec f rs -> g (ARec f rs)) -> ARec f ss -> g (ARec f ss) Source #

rcastC :: forall (f :: k0 -> Type). RecSubsetFCtx ARec f => ARec f ss -> ARec f rs Source #

rreplaceC :: forall (f :: k0 -> Type). RecSubsetFCtx ARec f => ARec f rs -> ARec f ss -> ARec f ss Source #

RecElem (ARec :: (a -> Type) -> [a] -> Type) (t :: a) (t' :: a) (t ': ts :: [a]) (t' ': ts :: [a]) 'Z Source # 
Instance details

Defined in Data.Vinyl.ARec.Internal

Associated Types

type RecElemFCtx ARec f Source #

Methods

rlensC :: (Functor g, RecElemFCtx ARec f) => (f t -> g (f t')) -> ARec f (t ': ts) -> g (ARec f (t' ': ts)) Source #

rgetC :: (RecElemFCtx ARec f, t ~ t') => ARec f (t ': ts) -> f t Source #

rputC :: RecElemFCtx ARec f => f t' -> ARec f (t ': ts) -> ARec f (t' ': ts) Source #

(RIndex t (s ': ts) ~ 'S i, NatToInt i, RecElem (ARec :: (a -> Type) -> [a] -> Type) t t' ts ts' i) => RecElem (ARec :: (a -> Type) -> [a] -> Type) (t :: a) (t' :: a) (s ': ts :: [a]) (s ': ts' :: [a]) ('S i) Source # 
Instance details

Defined in Data.Vinyl.ARec.Internal

Associated Types

type RecElemFCtx ARec f Source #

Methods

rlensC :: (Functor g, RecElemFCtx ARec f) => (f t -> g (f t')) -> ARec f (s ': ts) -> g (ARec f (s ': ts')) Source #

rgetC :: (RecElemFCtx ARec f, t ~ t') => ARec f (s ': ts) -> f t Source #

rputC :: RecElemFCtx ARec f => f t' -> ARec f (s ': ts) -> ARec f (s ': ts') Source #

(RPureConstrained (IndexableField rs) rs, RecApplicative rs, Eq (Rec f rs)) => Eq (ARec f rs) Source # 
Instance details

Defined in Data.Vinyl.ARec.Internal

Methods

(==) :: ARec f rs -> ARec f rs -> Bool #

(/=) :: ARec f rs -> ARec f rs -> Bool #

(RPureConstrained (IndexableField rs) rs, RecApplicative rs, Ord (Rec f rs)) => Ord (ARec f rs) Source # 
Instance details

Defined in Data.Vinyl.ARec.Internal

Methods

compare :: ARec f rs -> ARec f rs -> Ordering #

(<) :: ARec f rs -> ARec f rs -> Bool #

(<=) :: ARec f rs -> ARec f rs -> Bool #

(>) :: ARec f rs -> ARec f rs -> Bool #

(>=) :: ARec f rs -> ARec f rs -> Bool #

max :: ARec f rs -> ARec f rs -> ARec f rs #

min :: ARec f rs -> ARec f rs -> ARec f rs #

(RPureConstrained (IndexableField rs) rs, RecApplicative rs, Show (Rec f rs)) => Show (ARec f rs) Source # 
Instance details

Defined in Data.Vinyl.ARec.Internal

Methods

showsPrec :: Int -> ARec f rs -> ShowS #

show :: ARec f rs -> String #

showList :: [ARec f rs] -> ShowS #

type RecSubsetFCtx (ARec :: (k -> Type) -> [k] -> Type) (f :: k -> Type) Source # 
Instance details

Defined in Data.Vinyl.ARec.Internal

type RecSubsetFCtx (ARec :: (k -> Type) -> [k] -> Type) (f :: k -> Type) = ()
type RecElemFCtx (ARec :: (a -> Type) -> [a] -> Type) (f :: a -> Type) Source # 
Instance details

Defined in Data.Vinyl.ARec.Internal

type RecElemFCtx (ARec :: (a -> Type) -> [a] -> Type) (f :: a -> Type) = ()
type RecElemFCtx (ARec :: (a -> Type) -> [a] -> Type) (f :: a -> Type) Source # 
Instance details

Defined in Data.Vinyl.ARec.Internal

type RecElemFCtx (ARec :: (a -> Type) -> [a] -> Type) (f :: a -> Type) = ()

toARec :: forall f ts. (NatToInt (RLength ts), ToARec ts) => Rec f ts -> ARec f ts Source #

Convert a Rec into an ARec for constant-time field access.

fromARec :: forall f ts. (RecApplicative ts, RPureConstrained (IndexableField ts) ts) => ARec f ts -> Rec f ts Source #

Convert an ARec into a Rec.

xrecX :: TupleXRec f t => ListToHKDTuple f t -> XRec f t Source #

Build an XRec from a tuple.

xrecTuple :: TupleXRec f t => XRec f t -> ListToHKDTuple f t Source #

Convert an XRec to a tuple. Useful for pattern matching on an entire record.

ruple :: (IsoXRec f ts, TupleXRec f ts) => Rec f ts -> ListToHKDTuple f ts Source #

Convert a Rec to a tuple going through HKD to reduce syntactic noise. Useful for pattern matching on an entire Rec.

xrec :: (IsoXRec f t, TupleXRec f t) => ListToHKDTuple f t -> Rec f t Source #

Build a Rec from a tuple passing through XRec. This admits the most concise syntax for building a Rec. For example, xrec ("joe", 23) :: Rec Identity '[String, Int].

fieldRec :: TupleRec ElField t => t -> UncurriedRec (TupleToRecArgs ElField t) Source #

Build a FieldRec from a tuple of ElField values.

newtype ElField (t :: (Symbol, Type)) Source #

A value with a phantom Symbol label. It is not a Haskell Functor, but it is used in many of the same places a Functor is used in vinyl.

Morally: newtype ElField (s, t) = Field t But GHC doesn't allow that

Constructors

Field (Snd t) 

Instances

Instances details
Eq t => Eq (ElField '(s, t)) Source # 
Instance details

Defined in Data.Vinyl.Functor

Methods

(==) :: ElField '(s, t) -> ElField '(s, t) -> Bool #

(/=) :: ElField '(s, t) -> ElField '(s, t) -> Bool #

(Floating t, KnownSymbol s) => Floating (ElField '(s, t)) Source # 
Instance details

Defined in Data.Vinyl.Functor

Methods

pi :: ElField '(s, t) #

exp :: ElField '(s, t) -> ElField '(s, t) #

log :: ElField '(s, t) -> ElField '(s, t) #

sqrt :: ElField '(s, t) -> ElField '(s, t) #

(**) :: ElField '(s, t) -> ElField '(s, t) -> ElField '(s, t) #

logBase :: ElField '(s, t) -> ElField '(s, t) -> ElField '(s, t) #

sin :: ElField '(s, t) -> ElField '(s, t) #

cos :: ElField '(s, t) -> ElField '(s, t) #

tan :: ElField '(s, t) -> ElField '(s, t) #

asin :: ElField '(s, t) -> ElField '(s, t) #

acos :: ElField '(s, t) -> ElField '(s, t) #

atan :: ElField '(s, t) -> ElField '(s, t) #

sinh :: ElField '(s, t) -> ElField '(s, t) #

cosh :: ElField '(s, t) -> ElField '(s, t) #

tanh :: ElField '(s, t) -> ElField '(s, t) #

asinh :: ElField '(s, t) -> ElField '(s, t) #

acosh :: ElField '(s, t) -> ElField '(s, t) #

atanh :: ElField '(s, t) -> ElField '(s, t) #

log1p :: ElField '(s, t) -> ElField '(s, t) #

expm1 :: ElField '(s, t) -> ElField '(s, t) #

log1pexp :: ElField '(s, t) -> ElField '(s, t) #

log1mexp :: ElField '(s, t) -> ElField '(s, t) #

(Fractional t, KnownSymbol s) => Fractional (ElField '(s, t)) Source # 
Instance details

Defined in Data.Vinyl.Functor

Methods

(/) :: ElField '(s, t) -> ElField '(s, t) -> ElField '(s, t) #

recip :: ElField '(s, t) -> ElField '(s, t) #

fromRational :: Rational -> ElField '(s, t) #

(Num t, KnownSymbol s) => Num (ElField '(s, t)) Source # 
Instance details

Defined in Data.Vinyl.Functor

Methods

(+) :: ElField '(s, t) -> ElField '(s, t) -> ElField '(s, t) #

(-) :: ElField '(s, t) -> ElField '(s, t) -> ElField '(s, t) #

(*) :: ElField '(s, t) -> ElField '(s, t) -> ElField '(s, t) #

negate :: ElField '(s, t) -> ElField '(s, t) #

abs :: ElField '(s, t) -> ElField '(s, t) #

signum :: ElField '(s, t) -> ElField '(s, t) #

fromInteger :: Integer -> ElField '(s, t) #

Ord t => Ord (ElField '(s, t)) Source # 
Instance details

Defined in Data.Vinyl.Functor

Methods

compare :: ElField '(s, t) -> ElField '(s, t) -> Ordering #

(<) :: ElField '(s, t) -> ElField '(s, t) -> Bool #

(<=) :: ElField '(s, t) -> ElField '(s, t) -> Bool #

(>) :: ElField '(s, t) -> ElField '(s, t) -> Bool #

(>=) :: ElField '(s, t) -> ElField '(s, t) -> Bool #

max :: ElField '(s, t) -> ElField '(s, t) -> ElField '(s, t) #

min :: ElField '(s, t) -> ElField '(s, t) -> ElField '(s, t) #

(Real t, KnownSymbol s) => Real (ElField '(s, t)) Source # 
Instance details

Defined in Data.Vinyl.Functor

Methods

toRational :: ElField '(s, t) -> Rational #

(RealFrac t, KnownSymbol s) => RealFrac (ElField '(s, t)) Source # 
Instance details

Defined in Data.Vinyl.Functor

Methods

properFraction :: Integral b => ElField '(s, t) -> (b, ElField '(s, t)) #

truncate :: Integral b => ElField '(s, t) -> b #

round :: Integral b => ElField '(s, t) -> b #

ceiling :: Integral b => ElField '(s, t) -> b #

floor :: Integral b => ElField '(s, t) -> b #

(Show t, KnownSymbol s) => Show (ElField '(s, t)) Source # 
Instance details

Defined in Data.Vinyl.Functor

Methods

showsPrec :: Int -> ElField '(s, t) -> ShowS #

show :: ElField '(s, t) -> String #

showList :: [ElField '(s, t)] -> ShowS #

KnownSymbol s => Generic (ElField '(s, a)) Source # 
Instance details

Defined in Data.Vinyl.Functor

Associated Types

type Rep (ElField '(s, a)) :: Type -> Type #

Methods

from :: ElField '(s, a) -> Rep (ElField '(s, a)) x #

to :: Rep (ElField '(s, a)) x -> ElField '(s, a) #

Semigroup t => Semigroup (ElField '(s, t)) Source # 
Instance details

Defined in Data.Vinyl.Functor

Methods

(<>) :: ElField '(s, t) -> ElField '(s, t) -> ElField '(s, t) #

sconcat :: NonEmpty (ElField '(s, t)) -> ElField '(s, t) #

stimes :: Integral b => b -> ElField '(s, t) -> ElField '(s, t) #

(KnownSymbol s, Monoid t) => Monoid (ElField '(s, t)) Source # 
Instance details

Defined in Data.Vinyl.Functor

Methods

mempty :: ElField '(s, t) #

mappend :: ElField '(s, t) -> ElField '(s, t) -> ElField '(s, t) #

mconcat :: [ElField '(s, t)] -> ElField '(s, t) #

(KnownSymbol s, Storable t) => Storable (ElField '(s, t)) Source # 
Instance details

Defined in Data.Vinyl.Functor

Methods

sizeOf :: ElField '(s, t) -> Int #

alignment :: ElField '(s, t) -> Int #

peekElemOff :: Ptr (ElField '(s, t)) -> Int -> IO (ElField '(s, t)) #

pokeElemOff :: Ptr (ElField '(s, t)) -> Int -> ElField '(s, t) -> IO () #

peekByteOff :: Ptr b -> Int -> IO (ElField '(s, t)) #

pokeByteOff :: Ptr b -> Int -> ElField '(s, t) -> IO () #

peek :: Ptr (ElField '(s, t)) -> IO (ElField '(s, t)) #

poke :: Ptr (ElField '(s, t)) -> ElField '(s, t) -> IO () #

KnownSymbol s => IsoHKD ElField ('(s, a) :: (Symbol, Type)) Source #

Work with values of type ElField '(s,a) as if they were of type a.

Instance details

Defined in Data.Vinyl.XRec

Associated Types

type HKD ElField '(s, a) Source #

Methods

unHKD :: HKD ElField '(s, a) -> ElField '(s, a) Source #

toHKD :: ElField '(s, a) -> HKD ElField '(s, a) Source #

(i ~ RIndex t ts, NatToInt i, FieldOffset ElField ts t, Storable (Rec ElField ts), AllConstrained (FieldOffset ElField ts) ts) => RecElem (SRec2 ElField) (t :: (Symbol, Type)) (t :: (Symbol, Type)) (ts :: [(Symbol, Type)]) (ts :: [(Symbol, Type)]) i Source #

Field accessors for SRec2 specialized to ElField as the functor.

Instance details

Defined in Data.Vinyl.SRec

Associated Types

type RecElemFCtx (SRec2 ElField) f Source #

Methods

rlensC :: (Functor g, RecElemFCtx (SRec2 ElField) f) => (f t -> g (f t)) -> SRec2 ElField f ts -> g (SRec2 ElField f ts) Source #

rgetC :: (RecElemFCtx (SRec2 ElField) f, t ~ t) => SRec2 ElField f ts -> f t Source #

rputC :: RecElemFCtx (SRec2 ElField) f => f t -> SRec2 ElField f ts -> SRec2 ElField f ts Source #

(is ~ RImage rs ss, RecSubset (Rec :: ((Symbol, Type) -> Type) -> [(Symbol, Type)] -> Type) rs ss is, Storable (Rec ElField rs), Storable (Rec ElField ss), RPureConstrained (FieldOffset ElField ss) rs, RPureConstrained (FieldOffset ElField rs) rs, RFoldMap rs, RMap rs, RApply rs) => RecSubset (SRec2 ElField) (rs :: [(Symbol, Type)]) (ss :: [(Symbol, Type)]) is Source # 
Instance details

Defined in Data.Vinyl.SRec

Associated Types

type RecSubsetFCtx (SRec2 ElField) f Source #

Methods

rsubsetC :: forall g (f :: k -> Type). (Functor g, RecSubsetFCtx (SRec2 ElField) f) => (SRec2 ElField f rs -> g (SRec2 ElField f rs)) -> SRec2 ElField f ss -> g (SRec2 ElField f ss) Source #

rcastC :: forall (f :: k -> Type). RecSubsetFCtx (SRec2 ElField) f => SRec2 ElField f ss -> SRec2 ElField f rs Source #

rreplaceC :: forall (f :: k -> Type). RecSubsetFCtx (SRec2 ElField) f => SRec2 ElField f rs -> SRec2 ElField f ss -> SRec2 ElField f ss Source #

type Rep (ElField '(s, a)) Source # 
Instance details

Defined in Data.Vinyl.Functor

type Rep (ElField '(s, a)) = C1 ('MetaCons s 'PrefixI 'False) (Rec0 a)
type HKD ElField ('(s, a) :: (Symbol, Type)) Source # 
Instance details

Defined in Data.Vinyl.XRec

type HKD ElField ('(s, a) :: (Symbol, Type)) = a
type RecElemFCtx (SRec2 ElField) (f :: (Symbol, Type) -> Type) Source # 
Instance details

Defined in Data.Vinyl.SRec

type RecElemFCtx (SRec2 ElField) (f :: (Symbol, Type) -> Type) = f ~ ElField
type RecSubsetFCtx (SRec2 ElField) (f :: (Symbol, Type) -> Type) Source # 
Instance details

Defined in Data.Vinyl.SRec

type RecSubsetFCtx (SRec2 ElField) (f :: (Symbol, Type) -> Type) = f ~ ElField

data SRec f ts Source #

A simpler type for SRec2 whose RecElem and RecSubset instances are specialized to the ElField functor.

Instances

Instances details
(i ~ RIndex t ts, NatToInt i, FieldOffset ElField ts t, Storable (Rec ElField ts), AllConstrained (FieldOffset ElField ts) ts) => RecElem (SRec :: ((Symbol, Type) -> Type) -> [(Symbol, Type)] -> Type) (t :: (Symbol, Type)) (t :: (Symbol, Type)) (ts :: [(Symbol, Type)]) (ts :: [(Symbol, Type)]) i Source # 
Instance details

Defined in Data.Vinyl.SRec

Associated Types

type RecElemFCtx SRec f Source #

Methods

rlensC :: (Functor g, RecElemFCtx SRec f) => (f t -> g (f t)) -> SRec f ts -> g (SRec f ts) Source #

rgetC :: (RecElemFCtx SRec f, t ~ t) => SRec f ts -> f t Source #

rputC :: RecElemFCtx SRec f => f t -> SRec f ts -> SRec f ts Source #

(is ~ RImage rs ss, RecSubset (Rec :: ((Symbol, Type) -> Type) -> [(Symbol, Type)] -> Type) rs ss is, Storable (Rec ElField rs), Storable (Rec ElField ss), RPureConstrained (FieldOffset ElField ss) rs, RPureConstrained (FieldOffset ElField rs) rs, RFoldMap rs, RMap rs, RApply rs) => RecSubset (SRec :: ((Symbol, Type) -> Type) -> [(Symbol, Type)] -> Type) (rs :: [(Symbol, Type)]) (ss :: [(Symbol, Type)]) is Source # 
Instance details

Defined in Data.Vinyl.SRec

Associated Types

type RecSubsetFCtx SRec f Source #

Methods

rsubsetC :: forall g (f :: k -> Type). (Functor g, RecSubsetFCtx SRec f) => (SRec f rs -> g (SRec f rs)) -> SRec f ss -> g (SRec f ss) Source #

rcastC :: forall (f :: k -> Type). RecSubsetFCtx SRec f => SRec f ss -> SRec f rs Source #

rreplaceC :: forall (f :: k -> Type). RecSubsetFCtx SRec f => SRec f rs -> SRec f ss -> SRec f ss Source #

type RecElemFCtx (SRec :: ((Symbol, Type) -> Type) -> [(Symbol, Type)] -> Type) (f :: (Symbol, Type) -> Type) Source # 
Instance details

Defined in Data.Vinyl.SRec

type RecElemFCtx (SRec :: ((Symbol, Type) -> Type) -> [(Symbol, Type)] -> Type) (f :: (Symbol, Type) -> Type) = f ~ ElField
type RecSubsetFCtx (SRec :: ((Symbol, Type) -> Type) -> [(Symbol, Type)] -> Type) (f :: (Symbol, Type) -> Type) Source # 
Instance details

Defined in Data.Vinyl.SRec

type RecSubsetFCtx (SRec :: ((Symbol, Type) -> Type) -> [(Symbol, Type)] -> Type) (f :: (Symbol, Type) -> Type) = f ~ ElField

toSRec :: Storable (Rec f ts) => Rec f ts -> SRec f ts Source #

Create an SRec from a Rec. This should offer very fast field access, but note that its lens API (via RecElem and RecSubset) is restricted to the ElField functor.

fromSRec :: Storable (Rec f ts) => SRec f ts -> Rec f ts Source #

Create a Rec from an SRec.

class IsoXRec f ts where Source #

Conversion between XRec and Rec. It is convenient to build and consume XRec values to reduce syntactic noise, but Rec has a richer API that is difficult to build around the HKD type family.

Methods

fromXRec :: XRec f ts -> Rec f ts Source #

toXRec :: Rec f ts -> XRec f ts Source #

Instances

Instances details
IsoXRec (f :: u -> Type) ('[] :: [u]) Source # 
Instance details

Defined in Data.Vinyl.XRec

Methods

fromXRec :: XRec f '[] -> Rec f '[] Source #

toXRec :: Rec f '[] -> XRec f '[] Source #

(IsoXRec f ts, IsoHKD f t) => IsoXRec (f :: a -> Type) (t ': ts :: [a]) Source # 
Instance details

Defined in Data.Vinyl.XRec

Methods

fromXRec :: XRec f (t ': ts) -> Rec f (t ': ts) Source #

toXRec :: Rec f (t ': ts) -> XRec f (t ': ts) Source #

class XRApply f g rs where Source #

Like rapply: record of components f r -> g r may be applied to a record of f to get a record of g.

Methods

xrapply :: XRec (Lift (->) f g) rs -> XRec f rs -> XRec g rs Source #

Instances

Instances details
XRApply (f :: u -> Type) (g :: u -> Type) ('[] :: [u]) Source # 
Instance details

Defined in Data.Vinyl.XRec

Methods

xrapply :: XRec (Lift (->) f g) '[] -> XRec f '[] -> XRec g '[] Source #

XRApply f g rs => XRApply (f :: a -> Type) (g :: a -> Type) (r ': rs :: [a]) Source # 
Instance details

Defined in Data.Vinyl.XRec

Methods

xrapply :: XRec (Lift (->) f g) (r ': rs) -> XRec f (r ': rs) -> XRec g (r ': rs) Source #

class XRMap f g rs Source #

The implementation of xrmap is broken into a type class to permit unrolling of the recursion across a record. The function mapped across the vector hides the HKD type family under a newtype constructor to help the type checker.

Minimal complete definition

xrmapAux

Instances

Instances details
XRMap (f :: u -> Type) (g :: u -> Type) ('[] :: [u]) Source # 
Instance details

Defined in Data.Vinyl.XRec

Methods

xrmapAux :: (forall (a :: u0). XData f a -> XData g a) -> XRec f '[] -> XRec g '[] Source #

(XRMap f g rs, IsoHKD f r, IsoHKD g r) => XRMap (f :: a -> Type) (g :: a -> Type) (r ': rs :: [a]) Source # 
Instance details

Defined in Data.Vinyl.XRec

Methods

xrmapAux :: (forall (a0 :: u). XData f a0 -> XData g a0) -> XRec f (r ': rs) -> XRec g (r ': rs) Source #

type XRec f = Rec (XData f) Source #

pattern XRNil :: XRec f '[] Source #

pattern (::&) :: HKD f r -> XRec f rs -> XRec f (r ': rs) infixr 7 Source #

rmapX :: forall f g rs. (XRMap f g rs, IsoXRec f rs, IsoXRec g rs) => (forall a. HKD f a -> HKD g a) -> Rec f rs -> Rec g rs Source #

Like rmap, but the supplied function is written against the HKD-simplified types. This is xrmap sandwiched in between fromXRec and toXRec.

xrmap :: forall f g rs. XRMap f g rs => (forall a. HKD f a -> HKD g a) -> XRec f rs -> XRec g rs Source #

This is rmap for XRec. We apply a natural transformation between interpretation functors to transport a record value between interpretations.