Safe Haskell | None |
---|---|
Language | Haskell2010 |
Everything which requires PolyKinded extension, extracted in order not to spoil the remaining code.
Synopsis
- data TyNamedParam a = TyNamedParam Symbol a
- type (?:) = 'TyNamedParam
- type family TyNamedParamType p where ...
- type family TyNamedParamsNames (params :: [TyNamedParam k]) :: [Symbol] where ...
- class ReifyParamsNames (params :: [TyNamedParam k]) where
- reifyParamsNames' :: [Text]
- reifyParamsNames :: forall params. ReifyParamsNames params => [Text]
- type family LookupParam (desc :: Symbol) (name :: Symbol) (params :: [TyNamedParam k]) :: k where ...
- reifyParamsNamesSet :: forall params. ReifyParamsNames params => Set Text
- type family ParamsContainNoName (params :: [TyNamedParam k]) name :: Constraint where ...
- type family Elem (a :: k) (l :: [k]) :: Bool where ...
- type family If (cond :: Bool) (tru :: k) (fls :: k) :: k where ...
- type family (a :: k) == (b :: k) :: Bool where ...
- type family (a :: Bool) && (b :: Bool) :: Bool where ...
- type family (a :: Bool) || (b :: Bool) :: Bool where ...
- type family (as :: [k]) ++ (bs :: [k]) :: [k] where ...
- type family (as :: [k]) // (bs :: [k]) :: [k] where ...
- type family InsSorted (s :: Symbol) (ss :: [Symbol]) :: [Symbol] where ...
- type family UnionSorted (ss1 :: [Symbol]) (ss2 :: [Symbol]) :: [Symbol] where ...
Documentation
data TyNamedParam a Source #
Pair of type and its name as it appears in API.
Instances
type (?:) = 'TyNamedParam Source #
Convenient type alias for TyNamedParam
.
type family TyNamedParamType p where ... Source #
TyNamedParamType ('TyNamedParam _ a) = a |
type family TyNamedParamsNames (params :: [TyNamedParam k]) :: [Symbol] where ... Source #
TyNamedParamsNames '[] = '[] | |
TyNamedParamsNames ('TyNamedParam name _ ': params) = name ': TyNamedParamsNames params |
class ReifyParamsNames (params :: [TyNamedParam k]) where Source #
Extract info from SortingParams
.
reifyParamsNames' :: [Text] Source #
Get all expected parameter names.
Instances
ReifyParamsNames ('[] :: [TyNamedParam k]) Source # | |
Defined in Servant.Util.Common.PolyKinds reifyParamsNames' :: [Text] Source # | |
(KnownSymbol name, ReifyParamsNames params, ParamsContainNoName params name) => ReifyParamsNames ('TyNamedParam name p ': params :: [TyNamedParam k]) Source # | |
Defined in Servant.Util.Common.PolyKinds reifyParamsNames' :: [Text] Source # |
reifyParamsNames :: forall params. ReifyParamsNames params => [Text] Source #
type family LookupParam (desc :: Symbol) (name :: Symbol) (params :: [TyNamedParam k]) :: k where ... Source #
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 #
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 If (cond :: Bool) (tru :: k) (fls :: k) :: k where ... #
Type-level If. If True a b
==> a
; If False a b
==> b
type family UnionSorted (ss1 :: [Symbol]) (ss2 :: [Symbol]) :: [Symbol] where ... Source #
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)) |