vinyl-plus-0.1.1: Vinyl records utilities

Safe HaskellNone
LanguageHaskell2010

Data.Vinyl.Types

Synopsis

Documentation

data Rec a b :: (u -> *) -> [u] -> * where

A record is parameterized by a universe u, an interpretation f and a list of rows rs. The labels or indices of the record are given by inhabitants of the kind u; the type of values at any label r :: u is given by its interpretation f r :: *.

Constructors

RNil :: Rec u a ([] u) 
(:&) :: !(a r) -> !(Rec u a rs) -> Rec u a ((:) u r rs) infixr 7 

Instances

Eq (Rec k f ([] k)) 
(Eq (f r), Eq (Rec k f rs)) => Eq (Rec k f ((:) k r rs)) 
Ord (Rec k f ([] k)) 
(Ord (f r), Ord (Rec k f rs)) => Ord (Rec k f ((:) k r rs)) 
RecAll k f rs Show => Show (Rec k f rs)

Records may be shown insofar as their points may be shown. reifyConstraint is used to great effect here.

Storable (Rec k f ([] k)) 
(Storable (f r), Storable (Rec k f rs)) => Storable (Rec k f ((:) k r rs)) 
Monoid (Rec k f ([] k)) 
(Monoid (f r), Monoid (Rec k f rs)) => Monoid (Rec k f ((:) k r rs)) 

data CoRec :: (u -> *) -> [u] -> * where Source

CoRec is a generalized coproduct. The value it holds is the interpretation function f applied to exactly one of the types in the list. While a Rec can be thought of a nesting of tuples, a CoRec can be thought of as a nesting of Eithers.

Constructors

CoRecHere :: !(f r) -> CoRec f (r : rs) 
CoRecThere :: !(CoRec f rs) -> CoRec f (r : rs) 

Instances

(Show (CoRec k f ((:) k s rs)), Show (f r)) => Show (CoRec k f ((:) k r ((:) k s rs))) Source 
Show (f r) => Show (CoRec k f ((:) k r ([] k))) Source 
(Monoid (CoRec k f ((:) k s rs)), Monoid (f r)) => Monoid (CoRec k f ((:) k r ((:) k s rs))) Source 
Monoid (f r) => Monoid (CoRec k f ((:) k r ([] k))) Source 

newtype Flap a f Source

Constructors

Flap 

Fields

getFlap :: f a
 

Instances

Show (f a) => Show (Flap k a f) Source 

newtype FunctorRec fs a Source

Constructors

FunctorRec 

Fields

getFunctorRec :: Rec (Flap a) fs
 

Instances

(Functor r, Functor (FunctorRec * rs)) => Functor (FunctorRec * ((:) (* -> *) r rs)) Source 
Functor (FunctorRec * ([] (* -> *))) Source 
(Applicative r, Applicative (FunctorRec * rs)) => Applicative (FunctorRec * ((:) (* -> *) r rs)) Source 
Applicative (FunctorRec * ([] (* -> *))) Source 
(Contravariant r, Contravariant (FunctorRec * rs)) => Contravariant (FunctorRec * ((:) (* -> *) r rs)) Source 
Contravariant (FunctorRec * ([] (* -> *))) Source 
RecAll (k -> *) (Flap k a) fs Show => Show (FunctorRec k fs a) Source 

newtype FunctorCoRec fs a Source

Constructors

FunctorCoRec 

Fields

getFunctorCoRec :: CoRec (Flap a) fs
 

Instances

(Functor f, Functor (FunctorCoRec * ((:) (* -> *) g fs))) => Functor (FunctorCoRec * ((:) (* -> *) f ((:) (* -> *) g fs))) Source 
Functor r => Functor (FunctorCoRec * ((:) (* -> *) r ([] (* -> *)))) Source 
(Contravariant f, Contravariant (FunctorCoRec * ((:) (* -> *) g fs))) => Contravariant (FunctorCoRec * ((:) (* -> *) f ((:) (* -> *) g fs))) Source 
Contravariant r => Contravariant (FunctorCoRec * ((:) (* -> *) r ([] (* -> *)))) Source 
(Show (CoRec (k -> *) (Flap k r) ((:) (k -> *) g hs)), Show (f r)) => Show (FunctorCoRec k ((:) (k -> *) f ((:) (k -> *) g hs)) r) Source 
Show (f r) => Show (FunctorCoRec k ((:) (k -> *) f ([] (k -> *))) r) Source