reproject-0.1.0.0: Define and combine "materialized" projections

Safe HaskellNone
LanguageHaskell2010

Data.Reproject

Synopsis

Documentation

class Proj label ty where Source #

A named projection on a type. Very similar to Has but w/o a setter

Minimal complete definition

applyProj

Associated Types

type ProjVal label ty :: * Source #

Methods

applyProj :: Proxy label -> ty -> ProjVal label ty Source #

data Projection t a where Source #

A list of projections to be applied to a type

Constructors

ProjNil :: Projection t '[] 
Combine :: (KnownSymbol a, Proj a t, Cons a (ProjVal a t) (MakeTuple t b)) => Proxy (a :: Symbol) -> Projection t b -> Projection t (a ': b) 

Instances

Eq (Projection t v) Source # 

Methods

(==) :: Projection t v -> Projection t v -> Bool #

(/=) :: Projection t v -> Projection t v -> Bool #

(Proj a t, KnownSymbol a, Read (Projection t as), Cons a (ProjVal a t) (MakeTuple t as)) => Read (Projection t ((:) Symbol a as)) Source # 

Methods

readsPrec :: Int -> ReadS (Projection t ((Symbol ': a) as)) #

readList :: ReadS [Projection t ((Symbol ': a) as)] #

readPrec :: ReadPrec (Projection t ((Symbol ': a) as)) #

readListPrec :: ReadPrec [Projection t ((Symbol ': a) as)] #

Read (Projection t ([] Symbol)) Source # 
Show (Projection t v) Source # 

Methods

showsPrec :: Int -> Projection t v -> ShowS #

show :: Projection t v -> String #

showList :: [Projection t v] -> ShowS #

type family HasProj (a :: [Symbol]) t :: Constraint where ... Source #

Construct a constraint that asserts that for all labels a projection for type t exists

Equations

HasProj '[] t = True ~ True 
HasProj (x ': xs) t = (Proj x t, HasProj xs t) 

type family MakeTuple t k where ... Source #

Build a Labels compatible tuple from a list of projections

Equations

MakeTuple t '[] = () 
MakeTuple t (x ': xs) = Consed x (ProjVal x t) (MakeTuple t xs) 

proj :: forall a t r. (HasProj a t, r ~ MakeTuple t a) => Projection t a -> t -> r Source #

Apply all projections to a type and return them in a Labels compatible tuple. USe projVal to read single projections from it. Using OverloadedLabels is advised.

data Proxy k t :: forall k. k -> * #

A concrete, poly-kinded proxy type

Constructors

Proxy 

Instances

Monad (Proxy *) 

Methods

(>>=) :: Proxy * a -> (a -> Proxy * b) -> Proxy * b #

(>>) :: Proxy * a -> Proxy * b -> Proxy * b #

return :: a -> Proxy * a #

fail :: String -> Proxy * a #

Functor (Proxy *) 

Methods

fmap :: (a -> b) -> Proxy * a -> Proxy * b #

(<$) :: a -> Proxy * b -> Proxy * a #

Applicative (Proxy *) 

Methods

pure :: a -> Proxy * a #

(<*>) :: Proxy * (a -> b) -> Proxy * a -> Proxy * b #

(*>) :: Proxy * a -> Proxy * b -> Proxy * b #

(<*) :: Proxy * a -> Proxy * b -> Proxy * a #

Foldable (Proxy *) 

Methods

fold :: Monoid m => Proxy * m -> m #

foldMap :: Monoid m => (a -> m) -> Proxy * a -> m #

foldr :: (a -> b -> b) -> b -> Proxy * a -> b #

foldr' :: (a -> b -> b) -> b -> Proxy * a -> b #

foldl :: (b -> a -> b) -> b -> Proxy * a -> b #

foldl' :: (b -> a -> b) -> b -> Proxy * a -> b #

foldr1 :: (a -> a -> a) -> Proxy * a -> a #

foldl1 :: (a -> a -> a) -> Proxy * a -> a #

toList :: Proxy * a -> [a] #

null :: Proxy * a -> Bool #

length :: Proxy * a -> Int #

elem :: Eq a => a -> Proxy * a -> Bool #

maximum :: Ord a => Proxy * a -> a #

minimum :: Ord a => Proxy * a -> a #

sum :: Num a => Proxy * a -> a #

product :: Num a => Proxy * a -> a #

Traversable (Proxy *) 

Methods

traverse :: Applicative f => (a -> f b) -> Proxy * a -> f (Proxy * b) #

sequenceA :: Applicative f => Proxy * (f a) -> f (Proxy * a) #

mapM :: Monad m => (a -> m b) -> Proxy * a -> m (Proxy * b) #

sequence :: Monad m => Proxy * (m a) -> m (Proxy * a) #

Generic1 (Proxy *) 

Associated Types

type Rep1 (Proxy * :: * -> *) :: * -> * #

Methods

from1 :: Proxy * a -> Rep1 (Proxy *) a #

to1 :: Rep1 (Proxy *) a -> Proxy * a #

Alternative (Proxy *) 

Methods

empty :: Proxy * a #

(<|>) :: Proxy * a -> Proxy * a -> Proxy * a #

some :: Proxy * a -> Proxy * [a] #

many :: Proxy * a -> Proxy * [a] #

MonadPlus (Proxy *) 

Methods

mzero :: Proxy * a #

mplus :: Proxy * a -> Proxy * a -> Proxy * a #

Bounded (Proxy k s) 

Methods

minBound :: Proxy k s #

maxBound :: Proxy k s #

Enum (Proxy k s) 

Methods

succ :: Proxy k s -> Proxy k s #

pred :: Proxy k s -> Proxy k s #

toEnum :: Int -> Proxy k s #

fromEnum :: Proxy k s -> Int #

enumFrom :: Proxy k s -> [Proxy k s] #

enumFromThen :: Proxy k s -> Proxy k s -> [Proxy k s] #

enumFromTo :: Proxy k s -> Proxy k s -> [Proxy k s] #

enumFromThenTo :: Proxy k s -> Proxy k s -> Proxy k s -> [Proxy k s] #

Eq (Proxy k s) 

Methods

(==) :: Proxy k s -> Proxy k s -> Bool #

(/=) :: Proxy k s -> Proxy k s -> Bool #

Ord (Proxy k s) 

Methods

compare :: Proxy k s -> Proxy k s -> Ordering #

(<) :: Proxy k s -> Proxy k s -> Bool #

(<=) :: Proxy k s -> Proxy k s -> Bool #

(>) :: Proxy k s -> Proxy k s -> Bool #

(>=) :: Proxy k s -> Proxy k s -> Bool #

max :: Proxy k s -> Proxy k s -> Proxy k s #

min :: Proxy k s -> Proxy k s -> Proxy k s #

Read (Proxy k s) 
Show (Proxy k s) 

Methods

showsPrec :: Int -> Proxy k s -> ShowS #

show :: Proxy k s -> String #

showList :: [Proxy k s] -> ShowS #

Ix (Proxy k s) 

Methods

range :: (Proxy k s, Proxy k s) -> [Proxy k s] #

index :: (Proxy k s, Proxy k s) -> Proxy k s -> Int #

unsafeIndex :: (Proxy k s, Proxy k s) -> Proxy k s -> Int

inRange :: (Proxy k s, Proxy k s) -> Proxy k s -> Bool #

rangeSize :: (Proxy k s, Proxy k s) -> Int #

unsafeRangeSize :: (Proxy k s, Proxy k s) -> Int

Generic (Proxy k t) 

Associated Types

type Rep (Proxy k t) :: * -> * #

Methods

from :: Proxy k t -> Rep (Proxy k t) x #

to :: Rep (Proxy k t) x -> Proxy k t #

Monoid (Proxy k s) 

Methods

mempty :: Proxy k s #

mappend :: Proxy k s -> Proxy k s -> Proxy k s #

mconcat :: [Proxy k s] -> Proxy k s #

type Rep1 (Proxy *) 
type Rep1 (Proxy *) = D1 (MetaData "Proxy" "Data.Proxy" "base" False) (C1 (MetaCons "Proxy" PrefixI False) U1)
type Rep (Proxy k t) 
type Rep (Proxy k t) = D1 (MetaData "Proxy" "Data.Proxy" "base" False) (C1 (MetaCons "Proxy" PrefixI False) U1)

projVal :: Has label value record => Proxy label -> record -> value Source #

Get a projected value from a Labels compatible tuple. Alias for get

(@@) :: (KnownSymbol a, Proj a t, Cons a (ProjVal a t) (MakeTuple t b)) => Proxy (a :: Symbol) -> Projection t b -> Projection t (a ': b) infixr 5 Source #

Infix alias for Combine