vinyl-0.8.1: Extensible Records

Safe HaskellNone
LanguageHaskell2010

Data.Vinyl.ARec

Description

Constant-time field accessors for extensible records. The trade-off is the usual lists vs arrays one: it is fast to add an element to the head of a list, but element access is linear time; array access time is uniform, but extending the array is more slower.

Synopsis

Documentation

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

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

Constructors

ARec (Array Int Any) 

Instances

((~) Nat i (RIndex k t ts), NatToInt (RIndex k t ts)) => RecElem k (ARec k) t ts i Source # 

Methods

rlens :: Functor g => sing ts -> (f ts -> g (f ts)) -> t f i -> g (t f i) Source #

rget :: sing ts -> t f i -> f ts Source #

rput :: f ts -> t f i -> t f i Source #

((~) [Nat] is (RImage k rs ss), IndexWitnesses is, NatToInt (RLength k rs)) => RecSubset (k -> *) k (ARec k) rs ss is Source # 

Methods

rsubset :: Functor g => (ss f is -> g (ss f is)) -> ss f ss -> g (ss f ss) Source #

rcast :: ss f ss -> ss f is Source #

rreplace :: ss f is -> ss f ss -> ss f ss Source #

(AllConstrained k (IndexableField k rs) rs, RecApplicative k rs, Eq (Rec k f rs)) => Eq (ARec k f rs) Source # 

Methods

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

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

(AllConstrained k (IndexableField k rs) rs, RecApplicative k rs, Ord (Rec k f rs)) => Ord (ARec k f rs) Source # 

Methods

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

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

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

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

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

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

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

(AllConstrained k (IndexableField k rs) rs, RecApplicative k rs, Show (Rec k f rs)) => Show (ARec k f rs) Source # 

Methods

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

show :: ARec k f rs -> String #

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

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

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

class NatToInt (RIndex t ts) => IndexableField ts t Source #

Defines a constraint that lets us index into an ARec in order to produce a Rec using fromARec.

Instances

NatToInt (RIndex k t ts) => IndexableField k ts t Source # 

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

Convert an ARec into a Rec.

aget :: forall t f ts. NatToInt (RIndex t ts) => ARec f ts -> f t Source #

Get a field from an ARec.

aput :: forall t f ts. NatToInt (RIndex t ts) => f t -> ARec f ts -> ARec f ts Source #

Set a field in an ARec.

alens :: (Functor g, NatToInt (RIndex t ts)) => (f t -> g (f t)) -> ARec f ts -> g (ARec f ts) Source #

Define a lens for a field of an ARec.

arecGetSubset :: forall rs ss f. (IndexWitnesses (RImage rs ss), NatToInt (RLength rs)) => ARec f ss -> ARec f rs Source #

Get a subset of a record's fields.

arecSetSubset :: forall rs ss f. IndexWitnesses (RImage rs ss) => ARec f ss -> ARec f rs -> ARec f ss Source #

Set a subset of a larger record's fields to all of the fields of a smaller record.