servant-util-0.1.0.2: Servant servers utilities.
Safe HaskellNone
LanguageHaskell2010

Servant.Util.Common.PolyKinds

Description

Everything which requires PolyKinded extension, extracted in order not to spoil the remaining code.

Synopsis

Documentation

data TyNamedParam a Source #

Pair of type and its name as it appears in API.

Constructors

TyNamedParam Symbol a 

Instances

Instances details
FilterBackend backend => BackendApplySomeFilter (backend :: k) ('[] :: [TyNamedFilter]) Source # 
Instance details

Defined in Servant.Util.Combinators.Filtering.Backend

Methods

backendApplySomeFilter' :: FilteringSpecApp backend '[] -> SomeFilter '[] -> Maybe (MatchPredicate backend)

(Typeable fk, Typeable a, FilterBackend backend, KnownSymbol name, BackendApplyTypeFilter backend fk a, BackendApplySomeFilter backend params) => BackendApplySomeFilter (backend :: k) ('TyNamedParam name (fk a) ': params) Source # 
Instance details

Defined in Servant.Util.Combinators.Filtering.Backend

Methods

backendApplySomeFilter' :: FilteringSpecApp backend ('TyNamedParam name (fk a) ': params) -> SomeFilter ('TyNamedParam name (fk a) ': params) -> Maybe (MatchPredicate backend)

ReifyParamsNames ('[] :: [TyNamedParam k]) Source # 
Instance details

Defined in Servant.Util.Common.PolyKinds

ApplyToSortItem backend ('[] :: [TyNamedParam Type]) Source # 
Instance details

Defined in Servant.Util.Combinators.Sorting.Backend

(KnownSymbol name, ReifyParamsNames params, ParamsContainNoName params name) => ReifyParamsNames ('TyNamedParam name p ': params :: [TyNamedParam k]) Source # 
Instance details

Defined in Servant.Util.Common.PolyKinds

(KnownSymbol name, ApplyToSortItem backend params) => ApplyToSortItem backend ('TyNamedParam name p ': params) Source # 
Instance details

Defined in Servant.Util.Combinators.Sorting.Backend

Methods

applyToSortItem :: SortingSpecApp backend ('TyNamedParam name p ': params) -> SortingItem -> Maybe (BackendOrdering backend) Source #

ToHttpApiData (TaggedSortingItemsList provided) Source # 
Instance details

Defined in Servant.Util.Combinators.Sorting.Client

ReifyParamsNames allowed => FromHttpApiData (TaggedSortingItemsList allowed) Source #

Parse sort_by query param. Following the format described in Sorting section of https://www.moesif.com/blog/technical/api-design/REST-API-Design-Filtering-Sorting-and-Pagination/

Instance details

Defined in Servant.Util.Combinators.Sorting.Server

ReifySortingItems ('[] :: [TyNamedParam (SortingOrderType Type)]) Source # 
Instance details

Defined in Servant.Util.Combinators.Sorting.Base

AreFilteringParams ('[] :: [TyNamedFilter]) Source # 
Instance details

Defined in Servant.Util.Combinators.Filtering.Server

BuildSomeFilter ('[] :: [TyNamedFilter]) Source # 
Instance details

Defined in Servant.Util.Combinators.Filtering.Logging

(ReifySortingOrder order, KnownSymbol name, ReifySortingItems items) => ReifySortingItems ('TyNamedParam name (order field) ': items) Source # 
Instance details

Defined in Servant.Util.Combinators.Sorting.Base

(FromHttpApiData ty, Buildable ty, Typeable ty, KnownSymbol name, AreFilteringParams params) => AreFilteringParams ('TyNamedParam name ('ManualFilter ty) ': params) Source # 
Instance details

Defined in Servant.Util.Combinators.Filtering.Server

(FromHttpApiData ty, Typeable ty, AreAutoFilters (SupportedFilters ty), KnownSymbol name, AreFilteringParams params) => AreFilteringParams ('TyNamedParam name ('AutoFilter ty) ': params) Source # 
Instance details

Defined in Servant.Util.Combinators.Filtering.Server

Methods

parseFilteringParam :: Text -> Text -> Maybe (Either Text $ SomeFilter ('TyNamedParam name ('AutoFilter ty) ': params))

(KnownSymbol name, Typeable a, Buildable a, BuildSomeFilter params) => BuildSomeFilter ('TyNamedParam name ('ManualFilter a) ': params) Source # 
Instance details

Defined in Servant.Util.Combinators.Filtering.Logging

(KnownSymbol name, Typeable a, Buildable a, BuildSomeFilter params) => BuildSomeFilter ('TyNamedParam name ('AutoFilter a) ': params) Source # 
Instance details

Defined in Servant.Util.Combinators.Filtering.Logging

type (?:) = 'TyNamedParam Source #

Convenient type alias for TyNamedParam.

type family TyNamedParamType p where ... Source #

Equations

TyNamedParamType ('TyNamedParam _ a) = a 

type family TyNamedParamsNames (params :: [TyNamedParam k]) :: [Symbol] where ... Source #

Equations

TyNamedParamsNames '[] = '[] 
TyNamedParamsNames ('TyNamedParam name _ ': params) = name ': TyNamedParamsNames params 

class ReifyParamsNames (params :: [TyNamedParam k]) where Source #

Extract info from SortingParams.

Methods

reifyParamsNames' :: [Text] Source #

Get all expected parameter names.

Instances

Instances details
ReifyParamsNames ('[] :: [TyNamedParam k]) Source # 
Instance details

Defined in Servant.Util.Common.PolyKinds

(KnownSymbol name, ReifyParamsNames params, ParamsContainNoName params name) => ReifyParamsNames ('TyNamedParam name p ': params :: [TyNamedParam k]) Source # 
Instance details

Defined in Servant.Util.Common.PolyKinds

reifyParamsNames :: forall params. ReifyParamsNames params => [Text] Source #

type family LookupParam (desc :: Symbol) (name :: Symbol) (params :: [TyNamedParam k]) :: k where ... Source #

Equations

LookupParam desc name '[] = TypeError (('Text (("No " `AppendSymbol` desc) `AppendSymbol` " with name ") :<>: 'ShowType name) :<>: 'Text " found") 
LookupParam desc name ('TyNamedParam name a ': params) = a 
LookupParam desc name ('TyNamedParam name0 a ': params) = LookupParam desc name params 

reifyParamsNamesSet :: forall params. ReifyParamsNames params => Set Text Source #

All names are quaranteed to be unique, so taking set of them is safe (number of entires will be preserved).

type family ParamsContainNoName (params :: [TyNamedParam k]) name :: Constraint where ... Source #

Equations

ParamsContainNoName '[] name = () 
ParamsContainNoName ('TyNamedParam name p ': params) name = TypeError ('Text "Duplicate name in parameters: " :<>: 'ShowType name) 
ParamsContainNoName ('TyNamedParam name p ': params) name' = ParamsContainNoName params name' 

type family Elem (a :: k) (l :: [k]) :: Bool where ... Source #

Equations

Elem a '[] = 'False 
Elem a (a ': l) = 'True 
Elem a (_ ': l) = Elem a l 

type family If (cond :: Bool) (tru :: k) (fls :: k) :: k where ... #

Type-level If. If True a b ==> a; If False a b ==> b

Equations

If 'True (tru :: k) (fls :: k) = tru 
If 'False (tru :: k) (fls :: k) = fls 

type family (a :: k) == (b :: k) :: Bool where ... infix 4 Source #

Equations

a == a = 'True 
_ == _ = 'False 

type family (a :: Bool) && (b :: Bool) :: Bool where ... infix 3 Source #

Equations

'False && _ = 'False 
_ && 'False = 'False 
'True && 'True = 'True 

type family (a :: Bool) || (b :: Bool) :: Bool where ... infix 2 Source #

Equations

'True || _ = 'True 
_ || 'True = 'True 
'False || 'False = 'False 

type family (as :: [k]) ++ (bs :: [k]) :: [k] where ... Source #

Equations

'[] ++ bs = bs 
(a ': as) ++ bs = a ': (as ++ bs) 

type family (as :: [k]) // (bs :: [k]) :: [k] where ... Source #

Equations

'[] // bs = '[] 
(a ': as) // bs = If (a `Elem` bs) (as // bs) (a ': (as // bs)) 

type family InsSorted (s :: Symbol) (ss :: [Symbol]) :: [Symbol] where ... Source #

Equations

InsSorted s '[] = '[s] 
InsSorted s0 (s ': ss) = If (CmpSymbol s0 s == 'GT) (s ': InsSorted s0 ss) (If (s0 == s) (s ': ss) (s0 ': (s ': ss))) 

type family UnionSorted (ss1 :: [Symbol]) (ss2 :: [Symbol]) :: [Symbol] where ... Source #

Equations

UnionSorted ss1 '[] = ss1 
UnionSorted '[] ss2 = ss2 
UnionSorted (s1 ': ss1) (s2 ': ss2) = If (s1 == s2) (s1 ': UnionSorted ss1 ss2) (If (CmpSymbol s1 s2 == 'LT) (s1 ': UnionSorted ss1 (s2 ': ss2)) (s2 ': UnionSorted (s1 ': ss1) ss2))