container-1.0.1: Containers abstraction and utilities.

Safe HaskellNone
LanguageHaskell2010

Data.Container.Proxy

Description

This module provides proxy utilities for Data.Container.Class. | The proxy classes allow for nice options-dependent instance implementations, | hiding at the same time the complexity needed for type-level constrains resolution.

Documentation

type family ConstrainCls op ms ps info m :: * -> Constraint Source

Instances

type ConstrainCls ReservableOp ms ps info m = ReservableQM_ ms ps m Source 
type ConstrainCls GrowableOp ms ps info m = GrowableQM_ ms ps m Source 
type ConstrainCls ExpandableOp ms ps info m = ExpandableQM_ ms ps m Source 
type ConstrainCls AllocableOp ms ps info m = AllocableQM_ ms ps m Source 
type ConstrainCls MeasurableOp ms ps info m = MeasurableQM_ ms ps m Source 
type ConstrainCls TracksElemsOp ms ps (Info (Knowledge *) (Knowledge *) * idx (Known * el)) m = TracksElemsQM_ ms ps m el Source 
type ConstrainCls TracksIxesOp ms ps (Info (Knowledge *) (Knowledge *) * (Known * idx) el) m = TracksIxesQM_ ms ps m idx Source 
type ConstrainCls TracksUsedIxesOp ms ps (Info (Knowledge *) (Knowledge *) * (Known * idx) el) m = TracksUsedIxesQM_ ms ps m idx Source 
type ConstrainCls TracksFreeIxesOp ms ps (Info (Knowledge *) (Knowledge *) * (Known * idx) el) m = TracksFreeIxesQM_ ms ps m idx Source 
type ConstrainCls IndexableOp ms ps (Info (Knowledge *) (Knowledge *) * (Known * idx) (Known * el)) m = IndexableQM_ ms ps m idx el Source 
type ConstrainCls FreeableOp ms ps (Info (Knowledge *) (Knowledge *) * (Known * idx) el) m = FreeableQM_ ms ps m idx Source 
type ConstrainCls InsertableOp ms ps (Info (Knowledge *) (Knowledge *) * (Known * idx) (Known * el)) m = InsertableQM_ ms ps m idx el Source 
type ConstrainCls RemovableOp ms ps (Info (Knowledge *) (Knowledge *) * idx (Known * el)) m = RemovableQM_ ms ps m el Source 
type ConstrainCls AddableOp ms ps (Info (Knowledge *) (Knowledge *) * idx (Known * el)) m = AddableQM_ ms ps m el Source 
type ConstrainCls PrependableOp ms ps (Info (Knowledge *) (Knowledge *) * idx (Known * el)) m = PrependableQM_ ms ps m el Source 
type ConstrainCls AppendableOp ms ps (Info (Knowledge *) (Knowledge *) * idx (Known * el)) m = AppendableQM_ ms ps m el Source 
type ConstrainCls SingletonOp ms ps (Info (Knowledge *) (Knowledge *) * idx (Known * el)) m = SingletonQM_ ms ps m el Source 
type ConstrainCls MaxBoundedOp ms ps (Info (Knowledge *) (Knowledge *) * (Known * idx) el) m = MaxBoundedQM_ ms ps m idx Source 
type ConstrainCls MinBoundedOp ms ps (Info (Knowledge *) (Knowledge *) * (Known * idx) el) m = MinBoundedQM_ ms ps m idx Source 

type OpAxioms op info ms t = (ResultAxioms op info ms t, Functor (PrimResult op (GetOpts ms) t)) Source

type ResultAxioms op info ms t = Result_ op (info t) (GetOpts ms) ~ Result_ op (info (DataStore t)) (GetOpts ms) Source

runOp :: (Monad m, GetQueryData (GetOpts (MatchOpts (ModsOf cls cont) ms)) ms datas) => Proxy * cls -> Proxy * cont -> (OptQuery (MatchOpts (ModsOf cls cont) ms) (MatchOpts (ParamsOf cls cont) ps) -> a -> m (Res datas t)) -> (t1 -> m a) -> (t -> t1 -> m a1) -> Query ms ps -> t1 -> m (Res (QueryData * (GetOpts (MatchOpts (ModsOf cls cont) ms)) ms datas) a1) Source

class Monad m => MeasurableQM_ ms ps m cont where Source

Methods

sizeM_ :: OpAxioms MeasurableOp PrimInfo ms cont => OptQuery ms ps -> cont -> m (PrimResult MeasurableOp (GetOpts ms) cont Int) Source

Instances

MeasurableQM (GetOpts ms) (GetOpts ps) m a => MeasurableQM_ ms ps m (Resizable s a) Source 
MeasurableQM (GetOpts ms) (GetOpts ps) m a => MeasurableQM_ ms ps m (Reusable idx a) Source 
MeasurableQM (GetOpts ms) (GetOpts ps) m a => MeasurableQM_ ms ps m (Weak f a) Source 

class Monad m => MinBoundedQM_ ms ps m idx cont where Source

Methods

minBoundM_ :: OpAxioms MinBoundedOp (IdxInfo idx) ms cont => OptQuery ms ps -> cont -> m (IdxResult MinBoundedOp (GetOpts ms) idx cont idx) Source

Instances

MinBoundedQM (GetOpts ms) (GetOpts ps) m idx a => MinBoundedQM_ ms ps m idx (Resizable s a) Source 
(MinBoundedQM (GetOpts ms) (GetOpts ps) m idx a, (~) * idx idx') => MinBoundedQM_ ms ps m idx (Reusable idx' a) Source 
MinBoundedQM (GetOpts ms) (GetOpts ps) m idx a => MinBoundedQM_ ms ps m idx (Weak f a) Source 

class Monad m => MaxBoundedQM_ ms ps m idx cont where Source

Methods

maxBoundM_ :: OpAxioms MaxBoundedOp (IdxInfo idx) ms cont => OptQuery ms ps -> cont -> m (IdxResult MaxBoundedOp (GetOpts ms) idx cont idx) Source

Instances

MaxBoundedQM (GetOpts ms) (GetOpts ps) m idx a => MaxBoundedQM_ ms ps m idx (Resizable s a) Source 
(MaxBoundedQM (GetOpts ms) (GetOpts ps) m idx a, (~) * idx idx') => MaxBoundedQM_ ms ps m idx (Reusable idx' a) Source 
MaxBoundedQM (GetOpts ms) (GetOpts ps) m idx a => MaxBoundedQM_ ms ps m idx (Weak f a) Source 

class Monad m => SingletonQM_ ms ps m el cont where Source

Methods

singletonM_ :: OpAxioms SingletonOp (ElInfo el) ms cont => OptQuery ms ps -> el -> m (ElResult SingletonOp (GetOpts ms) el cont cont) Source

Instances

(SingletonQM (GetOpts ms) (GetOpts ps) m el a, Default s) => SingletonQM_ ms ps m el (Resizable s a) Source 
(SingletonQM ((:) * Ixed (GetOpts ms)) (GetOpts ps) m el a, (~) * idx (Index (Container a))) => SingletonQM_ ms ps m el (Reusable idx a) Source 
(MonadIO m, SingletonQM (GetOpts ms) (GetOpts ps) m (Weak el) a, (~) * (Result_ SingletonOp (ElInfo (Weak el) (Container a)) (GetOpts ms)) (Result_ SingletonOp (ElInfo el (Weak f a)) (GetOpts ms))) => SingletonQM_ ms ps m el (Weak f a) Source 

class Monad m => AllocableQM_ ms ps m cont where Source

Methods

allocM_ :: OpAxioms AllocableOp PrimInfo ms cont => OptQuery ms ps -> Int -> m (PrimResult AllocableOp (GetOpts ms) cont cont) Source

Instances

(AllocableQM (GetOpts ms) (GetOpts ps) m a, Default s) => AllocableQM_ ms ps m (Resizable s a) Source 
(AllocableQM ((:) * Ixed (GetOpts ms)) (GetOpts ps) m a, (~) * idx (Index (Container a))) => AllocableQM_ ms ps m (Reusable idx a) Source 
AllocableQM (GetOpts ms) (GetOpts ps) m a => AllocableQM_ ms ps m (Weak f a) Source 

class Monad m => ExpandableQM_ ms ps m cont where Source

Methods

expandM_ :: OpAxioms ExpandableOp PrimInfo ms cont => OptQuery ms ps -> cont -> m (PrimResult ExpandableOp (GetOpts ms) cont cont) Source

Instances

(GrowableQM (GetOpts ms) (GetOpts ps) m a, ResizeStep s a, (~) * (Result_ GrowableOp (PrimInfo (Container a)) (GetOpts ms)) (Result_ ExpandableOp (PrimInfo (Resizable s a)) (GetOpts ms))) => ExpandableQM_ ms ps m (Resizable s a) Source 
(ExpandableQM ((:) * Ixed (GetOpts ms)) (GetOpts ps) m a, (~) * idx (Index (Container a))) => ExpandableQM_ ms ps m (Reusable idx a) Source 
ExpandableQM (GetOpts ms) (GetOpts ps) m a => ExpandableQM_ ms ps m (Weak f a) Source 

class Monad m => GrowableQM_ ms ps m cont where Source

Methods

growM_ :: OpAxioms GrowableOp PrimInfo ms cont => OptQuery ms ps -> Int -> cont -> m (PrimResult GrowableOp (GetOpts ms) cont cont) Source

Instances

(GrowableQM ((:) * Ixed (GetOpts ms)) (GetOpts ps) m a, (~) * idx (Index (Container a))) => GrowableQM_ ms ps m (Reusable idx a) Source 
GrowableQM (GetOpts ms) (GetOpts ps) m a => GrowableQM_ ms ps m (Weak f a) Source 

class Monad m => AppendableQM_ ms ps m el cont where Source

Methods

appendM_ :: OpAxioms AppendableOp (ElInfo el) ms cont => OptQuery ms ps -> el -> cont -> m (ElResult AppendableOp (GetOpts ms) el cont cont) Source

Instances

AppendableQM (GetOpts ms) (GetOpts ps) m el a => AppendableQM_ ms ps m el (Resizable s a) Source 
AppendableQM (GetOpts ms) (GetOpts ps) m el a => AppendableQM_ ms ps m el (Reusable idx a) Source 
(AppendableQM ((:) * Ixed (GetOpts ms)) (GetOpts ps) m (Weak el) a, (~) * (Result_ AppendableOp (ElInfo (Weak el) (Container a)) (GetOpts ms)) (Result_ AppendableOp (ElInfo el (Weak (IdxFinalizer idx) a)) (GetOpts ms)), (~) * idx (Index (Container a)), MonadIO m, MonadFix m) => AppendableQM_ ms ps m el (Weak (IdxFinalizer idx) a) Source 

class Monad m => PrependableQM_ ms ps m el cont where Source

Methods

prependM_ :: OpAxioms PrependableOp (ElInfo el) ms cont => OptQuery ms ps -> el -> cont -> m (ElResult PrependableOp (GetOpts ms) el cont cont) Source

Instances

PrependableQM (GetOpts ms) (GetOpts ps) m el a => PrependableQM_ ms ps m el (Resizable s a) Source 
PrependableQM (GetOpts ms) (GetOpts ps) m el a => PrependableQM_ ms ps m el (Reusable idx a) Source 
(PrependableQM ((:) * Ixed (GetOpts ms)) (GetOpts ps) m (Weak el) a, (~) * (Result_ PrependableOp (ElInfo (Weak el) (Container a)) (GetOpts ms)) (Result_ PrependableOp (ElInfo el (Weak (IdxFinalizer idx) a)) (GetOpts ms)), (~) * idx (Index (Container a)), MonadIO m, MonadFix m) => PrependableQM_ ms ps m el (Weak (IdxFinalizer idx) a) Source 

class Monad m => AddableQM_ ms ps m el cont where Source

Methods

addM_ :: OpAxioms AddableOp (ElInfo el) ms cont => OptQuery ms ps -> el -> cont -> m (ElResult AddableOp (GetOpts ms) el cont cont) Source

Instances

AddableQM (GetOpts ms) (GetOpts ps) m el a => AddableQM_ ms ps m el (Resizable s a) Source 
(InsertableQM (GetOpts ms) (GetOpts ps) m idx el a, ExpandableM m (Reusable idx a), (~) * (Result_ InsertableOp (IdxElInfo idx el (Container a)) (GetOpts ms)) (Result_ AddableOp (ElInfo el (Reusable idx a)) (GetOpts ms))) => AddableQM_ ms ps m el (Reusable idx a) Source 
(AddableQM ((:) * Ixed (GetOpts ms)) (GetOpts ps) m (Weak el) a, (~) * (Result_ AddableOp (ElInfo (Weak el) (Container a)) (GetOpts ms)) (Result_ AddableOp (ElInfo el (Weak (IdxFinalizer idx) a)) (GetOpts ms)), (~) * idx (Index (Container a)), MonadIO m, MonadFix m) => AddableQM_ ms ps m el (Weak (IdxFinalizer idx) a) Source 

class Monad m => RemovableQM_ ms ps m el cont where Source

Methods

removeM_ :: OpAxioms RemovableOp (ElInfo el) ms cont => OptQuery ms ps -> el -> cont -> m (ElResult RemovableOp (GetOpts ms) el cont cont) Source

Instances

RemovableQM (GetOpts ms) (GetOpts ps) m el a => RemovableQM_ ms ps m el (Resizable s a) Source 

class Monad m => InsertableQM_ ms ps m idx el cont where Source

Methods

insertM_ :: OpAxioms InsertableOp (IdxElInfo idx el) ms cont => OptQuery ms ps -> idx -> el -> cont -> m (IdxElResult InsertableOp (GetOpts ms) idx el cont cont) Source

Instances

InsertableQM (GetOpts ms) (GetOpts ps) m idx el a => InsertableQM_ ms ps m idx el (Resizable s a) Source 
(InsertableQM (GetOpts ms) (GetOpts ps) m idx el a, (~) * idx idx') => InsertableQM_ ms ((:) (Opt *) (P * Unchecked) ((:) (Opt *) (P * Inplace) ps)) m idx el (Reusable idx' a) Source 

class Monad m => FreeableQM_ ms ps m idx cont where Source

Methods

freeM_ :: OpAxioms FreeableOp (IdxInfo idx) ms cont => OptQuery ms ps -> idx -> cont -> m (IdxResult FreeableOp (GetOpts ms) idx cont cont) Source

Instances

FreeableQM (GetOpts ms) (GetOpts ps) m idx a => FreeableQM_ ms ps m idx (Resizable s a) Source 
(FreeableQM (GetOpts ms) (GetOpts ps) m idx a, (~) * idx idx') => FreeableQM_ ms ps m idx (Reusable idx' a) Source 
(FreeableQM (GetOpts ms) (GetOpts ps) m idx a, (~) * idx idx') => FreeableQM_ ms ps m idx (Weak (IdxFinalizer idx) a) Source 

class Monad m => ReservableQM_ ms ps m cont where Source

Methods

reserveM_ :: OpAxioms ReservableOp PrimInfo ms cont => OptQuery ms ps -> cont -> m (PrimResult ReservableOp (GetOpts ms) cont cont) Source

Instances

(Monad m, (~) * idx (Index (Container a))) => ReservableQM_ ((:) (Opt *) (P * Ixed) ([] (Opt *))) ps m (Reusable idx a) Source 

class Monad m => IndexableQM_ ms ps m idx el cont where Source

Methods

indexM_ :: OpAxioms IndexableOp (IdxElInfo idx el) ms cont => OptQuery ms ps -> idx -> cont -> m (IdxElResult IndexableOp (GetOpts ms) idx el cont el) Source

Instances

IndexableQM (GetOpts ms) (GetOpts ps) m idx el a => IndexableQM_ ms ps m idx el (Resizable s a) Source 
(IndexableQM (GetOpts ms) (GetOpts ps) m idx el a, (~) * idx idx') => IndexableQM_ ms ps m idx el (Reusable idx' a) Source 

class Monad m => TracksFreeIxesQM_ ms ps m idx cont where Source

Methods

freeIxesM_ :: OpAxioms TracksFreeIxesOp (IdxInfo idx) ms cont => OptQuery ms ps -> cont -> m (IdxResult TracksFreeIxesOp (GetOpts ms) idx cont [idx]) Source

Instances

TracksFreeIxesQM (GetOpts ms) (GetOpts ps) m idx a => TracksFreeIxesQM_ ms ps m idx (Resizable s a) Source 
(Monad m, (~) * idx idx') => TracksFreeIxesQM_ ([] (Opt *)) ps m idx (Reusable idx' a) Source 

class Monad m => TracksUsedIxesQM_ ms ps m idx cont where Source

Methods

usedIxesM_ :: OpAxioms TracksUsedIxesOp (IdxInfo idx) ms cont => OptQuery ms ps -> cont -> m (IdxResult TracksUsedIxesOp (GetOpts ms) idx cont [idx]) Source

Instances

TracksUsedIxesQM (GetOpts ms) (GetOpts ps) m idx a => TracksUsedIxesQM_ ms ps m idx (Resizable s a) Source 
(TracksIxes idx (Reusable idx a), TracksFreeIxes idx (Reusable idx a), (~) * idx idx', Monad m, Eq idx) => TracksUsedIxesQM_ ([] (Opt *)) ps m idx (Reusable idx' a) Source 

class Monad m => TracksIxesQM_ ms ps m idx cont where Source

Methods

ixesM_ :: OpAxioms TracksIxesOp (IdxInfo idx) ms cont => OptQuery ms ps -> cont -> m (IdxResult TracksIxesOp (GetOpts ms) idx cont [idx]) Source

Instances

TracksIxesQM (GetOpts ms) (GetOpts ps) m idx a => TracksIxesQM_ ms ps m idx (Resizable s a) Source 
(TracksIxesQM (GetOpts ms) (GetOpts ps) m idx a, (~) * idx idx') => TracksIxesQM_ ms ps m idx (Reusable idx' a) Source 

class Monad m => TracksElemsQM_ ms ps m el cont where Source

Methods

elemsM_ :: OpAxioms TracksElemsOp (ElInfo el) ms cont => OptQuery ms ps -> cont -> m (ElResult TracksElemsOp (GetOpts ms) el cont [el]) Source

Instances

TracksElemsQM (GetOpts ms) (GetOpts ps) m el a => TracksElemsQM_ ms ps m el (Resizable s a) Source 
(TracksUsedIxes idx (Reusable idx a), Indexable idx el (Reusable idx a), Monad m) => TracksElemsQM_ ([] (Opt *)) ps m el (Reusable idx a) Source