{-# LANGUAGE DataKinds #-}{-# LANGUAGE FlexibleContexts #-}{-# LANGUAGE ScopedTypeVariables #-}{-# LANGUAGE TypeFamilies #-}{-# LANGUAGE TypeOperators #-}{-# OPTIONS_GHC -Wno-redundant-constraints #-}moduleServant.API.Modifiers(-- * Required / optional argumentRequired ,Optional ,FoldRequired ,FoldRequired' ,-- * Lenient / strict parsingLenient ,Strict ,FoldLenient ,FoldLenient' ,-- * UtilitiesRequiredArgument ,foldRequiredArgument ,unfoldRequiredArgument ,RequestArgument ,unfoldRequestArgument ,)whereimportData.Kind(Type)importData.Proxy(Proxy(..))importData.Singletons.Bool(SBool(..),SBoolI(..))importData.Text(Text)importData.Type.Bool(If)-- | Required argument. Not wrapped.dataRequired -- | Optional argument. Wrapped in 'Maybe'.dataOptional -- | Fold modifier list to decide whether argument is required.---- >>> :kind! FoldRequired '[Required, Description "something"]-- FoldRequired '[Required, Description "something"] :: Bool-- = 'True---- >>> :kind! FoldRequired '[Required, Optional]-- FoldRequired '[Required, Optional] :: Bool-- = 'False---- >>> :kind! FoldRequired '[]-- FoldRequired '[] :: Bool-- = 'False--typeFoldRequired mods =FoldRequired' 'Falsemods -- | Implementation of 'FoldRequired'.typefamilyFoldRequired' (acc ::Bool)(mods ::[Type])::BoolwhereFoldRequired' acc '[]=acc FoldRequired' acc (Required ':mods )=FoldRequired' 'Truemods FoldRequired' acc (Optional ':mods )=FoldRequired' 'Falsemods FoldRequired' acc (mod ':mods )=FoldRequired' acc mods -- | Leniently parsed argument, i.e. parsing never fail. Wrapped in @'Either' 'Text'@.dataLenient -- | Strictly parsed argument. Not wrapped.dataStrict -- | Fold modifier list to decide whether argument should be parsed strictly or leniently.---- >>> :kind! FoldLenient '[]-- FoldLenient '[] :: Bool-- = 'False--typeFoldLenient mods =FoldLenient' 'Falsemods -- | Implementation of 'FoldLenient'.typefamilyFoldLenient' (acc ::Bool)(mods ::[Type])::BoolwhereFoldLenient' acc '[]=acc FoldLenient' acc (Lenient ':mods )=FoldLenient' 'Truemods FoldLenient' acc (Strict ':mods )=FoldLenient' 'Falsemods FoldLenient' acc (mod ':mods )=FoldLenient' acc mods -- | Helper type alias.---- * 'Required' ↦ @a@---- * 'Optional' ↦ @'Maybe' a@--typeRequiredArgument mods a =If(FoldRequired mods )a (Maybea )-- | Fold a 'RequiredAgument' into a valuefoldRequiredArgument ::forallmods a r .(SBoolI(FoldRequired mods ))=>Proxymods ->(a ->r )-- ^ 'Required'->(Maybea ->r )-- ^ 'Optional'->RequiredArgument mods a ->r foldRequiredArgument :: forall (mods :: [Type]) a r.
SBoolI (FoldRequired mods) =>
Proxy mods
-> (a -> r) -> (Maybe a -> r) -> RequiredArgument mods a -> r
foldRequiredArgument Proxy mods
_a -> r
f Maybe a -> r
g RequiredArgument mods a
mx =case(SBool (FoldRequired mods)
forall (b :: Bool). SBoolI b => SBool b
sbool::SBool(FoldRequired mods ),RequiredArgument mods a
mx )of(SBool (FoldRequired mods)
STrue,RequiredArgument mods a
x )->a -> r
f a
RequiredArgument mods a
x (SBool (FoldRequired mods)
SFalse,RequiredArgument mods a
x )->Maybe a -> r
g Maybe a
RequiredArgument mods a
x -- | Unfold a value into a 'RequiredArgument'.unfoldRequiredArgument ::forallmods m a .(Monadm ,SBoolI(FoldRequired mods ),SBoolI(FoldLenient mods ))=>Proxymods ->m (RequiredArgument mods a )-- ^ error when argument is required->(Text->m (RequiredArgument mods a ))-- ^ error when argument is strictly parsed->Maybe(EitherTexta )-- ^ value->m (RequiredArgument mods a )unfoldRequiredArgument :: forall (mods :: [Type]) (m :: Type -> Type) a.
(Monad m, SBoolI (FoldRequired mods), SBoolI (FoldLenient mods)) =>
Proxy mods
-> m (RequiredArgument mods a)
-> (Text -> m (RequiredArgument mods a))
-> Maybe (Either Text a)
-> m (RequiredArgument mods a)
unfoldRequiredArgument Proxy mods
_m (RequiredArgument mods a)
errReq Text -> m (RequiredArgument mods a)
errSt Maybe (Either Text a)
mex =case(SBool (FoldRequired mods)
forall (b :: Bool). SBoolI b => SBool b
sbool::SBool(FoldRequired mods ),Maybe (Either Text a)
mex )of(SBool (FoldRequired mods)
STrue,Maybe (Either Text a)
Nothing)->m (RequiredArgument mods a)
errReq (SBool (FoldRequired mods)
SFalse,Maybe (Either Text a)
Nothing)->Maybe a -> m (Maybe a)
forall a. a -> m a
forall (m :: Type -> Type) a. Monad m => a -> m a
returnMaybe a
forall a. Maybe a
Nothing(SBool (FoldRequired mods)
STrue,JustEither Text a
ex )->(Text -> m a) -> (a -> m a) -> Either Text a -> m a
forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
eitherText -> m a
Text -> m (RequiredArgument mods a)
errSt a -> m a
forall a. a -> m a
forall (m :: Type -> Type) a. Monad m => a -> m a
returnEither Text a
ex (SBool (FoldRequired mods)
SFalse,JustEither Text a
ex )->(Text -> m (Maybe a))
-> (a -> m (Maybe a)) -> Either Text a -> m (Maybe a)
forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
eitherText -> m (Maybe a)
Text -> m (RequiredArgument mods a)
errSt (Maybe a -> m (Maybe a)
forall a. a -> m a
forall (m :: Type -> Type) a. Monad m => a -> m a
return(Maybe a -> m (Maybe a)) -> (a -> Maybe a) -> a -> m (Maybe a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
.a -> Maybe a
forall a. a -> Maybe a
Just)Either Text a
ex -- | Helper type alias.---- By default argument is 'Optional' and 'Strict'.---- * 'Required', 'Strict' ↦ @a@---- * 'Required', 'Lenient' ↦ @'Either' 'Text' a@---- * 'Optional', 'Strict' ↦ @'Maybe' a@---- * 'Optional', 'Lenient' ↦ @'Maybe' ('Either' 'Text' a)@--typeRequestArgument mods a =If(FoldRequired mods )(If(FoldLenient mods )(EitherTexta )a )(Maybe(If(FoldLenient mods )(EitherTexta )a ))-- | Unfold a value into a 'RequestArgument'.unfoldRequestArgument ::forallmods m a .(Monadm ,SBoolI(FoldRequired mods ),SBoolI(FoldLenient mods ))=>Proxymods ->m (RequestArgument mods a )-- ^ error when argument is required->(Text->m (RequestArgument mods a ))-- ^ error when argument is strictly parsed->Maybe(EitherTexta )-- ^ value->m (RequestArgument mods a )unfoldRequestArgument :: forall (mods :: [Type]) (m :: Type -> Type) a.
(Monad m, SBoolI (FoldRequired mods), SBoolI (FoldLenient mods)) =>
Proxy mods
-> m (RequestArgument mods a)
-> (Text -> m (RequestArgument mods a))
-> Maybe (Either Text a)
-> m (RequestArgument mods a)
unfoldRequestArgument Proxy mods
_m (RequestArgument mods a)
errReq Text -> m (RequestArgument mods a)
errSt Maybe (Either Text a)
mex =case(SBool (FoldRequired mods)
forall (b :: Bool). SBoolI b => SBool b
sbool::SBool(FoldRequired mods ),Maybe (Either Text a)
mex ,SBool (FoldLenient mods)
forall (b :: Bool). SBoolI b => SBool b
sbool::SBool(FoldLenient mods ))of(SBool (FoldRequired mods)
STrue,Maybe (Either Text a)
Nothing,SBool (FoldLenient mods)
_)->m (RequestArgument mods a)
errReq (SBool (FoldRequired mods)
SFalse,Maybe (Either Text a)
Nothing,SBool (FoldLenient mods)
_)->Maybe (If (FoldLenient mods) (Either Text a) a)
-> m (Maybe (If (FoldLenient mods) (Either Text a) a))
forall a. a -> m a
forall (m :: Type -> Type) a. Monad m => a -> m a
returnMaybe (If (FoldLenient mods) (Either Text a) a)
forall a. Maybe a
Nothing(SBool (FoldRequired mods)
STrue,JustEither Text a
ex ,SBool (FoldLenient mods)
STrue)->Either Text a -> m (Either Text a)
forall a. a -> m a
forall (m :: Type -> Type) a. Monad m => a -> m a
returnEither Text a
ex (SBool (FoldRequired mods)
STrue,JustEither Text a
ex ,SBool (FoldLenient mods)
SFalse)->(Text -> m a) -> (a -> m a) -> Either Text a -> m a
forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
eitherText -> m a
Text -> m (RequestArgument mods a)
errSt a -> m a
forall a. a -> m a
forall (m :: Type -> Type) a. Monad m => a -> m a
returnEither Text a
ex (SBool (FoldRequired mods)
SFalse,JustEither Text a
ex ,SBool (FoldLenient mods)
STrue)->Maybe (Either Text a) -> m (Maybe (Either Text a))
forall a. a -> m a
forall (m :: Type -> Type) a. Monad m => a -> m a
return(Either Text a -> Maybe (Either Text a)
forall a. a -> Maybe a
JustEither Text a
ex )(SBool (FoldRequired mods)
SFalse,JustEither Text a
ex ,SBool (FoldLenient mods)
SFalse)->(Text -> m (Maybe a))
-> (a -> m (Maybe a)) -> Either Text a -> m (Maybe a)
forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
eitherText -> m (Maybe a)
Text -> m (RequestArgument mods a)
errSt (Maybe a -> m (Maybe a)
forall a. a -> m a
forall (m :: Type -> Type) a. Monad m => a -> m a
return(Maybe a -> m (Maybe a)) -> (a -> Maybe a) -> a -> m (Maybe a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
.a -> Maybe a
forall a. a -> Maybe a
Just)Either Text a
ex -- $setup-- >>> import Servant.API

AltStyle によって変換されたページ (->オリジナル) /