Safe Haskell | Safe |
---|
Synopsis
- data GenericResult a b
- genericResult :: (a -> c) -> (b -> c) -> GenericResult a b -> c
- type Result = GenericResult String
- newtype ResultT a m b = ResultT {
- runResultT :: m (GenericResult a b)
- elimResultT :: Monad m => (a -> ResultT a' m b') -> (b -> ResultT a' m b') -> ResultT a m b -> ResultT a' m b'
- withError :: MonadError e m => (e' -> e) -> GenericResult e' a -> m a
- withErrorT :: (Monad m, Error e) => (e' -> e) -> ResultT e' m a -> ResultT e m a
- toError :: MonadError e m => GenericResult e a -> m a
- toErrorBase :: (MonadBase b m, MonadError e m) => ResultT e b a -> m a
- toErrorStr :: (MonadError e m, Error e) => Result a -> m a
- tryError :: MonadError e m => m a -> m (Either e a)
- mkResultT :: (Monad m, Error e) => m (Result a) -> ResultT e m a
- isOk :: GenericResult a b -> Bool
- isBad :: GenericResult a b -> Bool
- justOk :: [GenericResult a b] -> [b]
- justBad :: [GenericResult a b] -> [a]
- eitherToResult :: Either a b -> GenericResult a b
- isLeft :: Either a b -> Bool
- isRight :: Either a b -> Bool
- annotateResult :: (MonadError e m, Error e) => String -> Result a -> m a
- annotateError :: (MonadError e m, Error e, Monoid e) => String -> m a -> m a
- failError :: (MonadError e m, Error e) => String -> m a
- handleErrorT :: (Monad m, Error e) => (e' -> ResultT e m a) -> ResultT e' m a -> ResultT e m a
- catchErrorT :: (Monad m, Error e) => ResultT e' m a -> (e' -> ResultT e m a) -> ResultT e m a
- orElse :: MonadError e m => m a -> m a -> m a
- iterateOk :: (a -> GenericResult b a) -> a -> [a]
- select :: a -> [(Bool, a)] -> a
- runListHead :: a -> (b -> a) -> [b] -> a
- data MatchPriority
- data LookupResult = LookupResult {
- lrMatchPriority :: MatchPriority
- lrContent :: String
- prefixMatch :: String -> String -> Bool
- goodMatchPriority :: MatchPriority -> Bool
- goodLookupResult :: LookupResult -> Bool
- compareNameComponent :: String -> String -> LookupResult
- chooseLookupResult :: String -> String -> LookupResult -> LookupResult
- lookupName :: [String] -> String -> LookupResult
- newtype ListSet a = ListSet {
- unListSet :: Set a
- emptyListSet :: ListSet a
Documentation
data GenericResult a b Source #
Generic monad for our error handling mechanisms.
Instances
genericResult :: (a -> c) -> (b -> c) -> GenericResult a b -> c Source #
Sum type structure of GenericResult.
type Result = GenericResult String Source #
Type alias for a string Result.
newtype ResultT a m b Source #
This is a monad transformation for Result. It's implementation is based on the implementations of MaybeT and ErrorT.
ResultT
is very similar to ErrorT
, but with one subtle difference:
If mplus
combines two failing operations, errors of both of them
are combined.
ResultT | |
|
Instances
(MonadBase IO m, Error a) => MonadBase IO (ResultT a m) # | |
Defined in Ganeti.BasicTypes | |
(Monad m, Error a) => MonadError a (ResultT a m) # | |
Defined in Ganeti.BasicTypes throwError :: a -> ResultT a m a0 catchError :: ResultT a m a0 -> (a -> ResultT a m a0) -> ResultT a m a0 | |
(Error a, MonadBaseControl IO m) => MonadBaseControl IO (ResultT a m) # | |
Defined in Ganeti.BasicTypes type StM (ResultT a m) a | |
MonadTrans (ResultT a) # | |
Defined in Ganeti.BasicTypes | |
Error a => MonadTransControl (ResultT a) # | |
(Monad m, Error a) => Monad (ResultT a m) # | |
Functor m => Functor (ResultT a m) # | |
(Monad m, Error a) => MonadFail (ResultT a m) # | |
Defined in Ganeti.BasicTypes | |
(Applicative m, Monad m, Error a) => Applicative (ResultT a m) # | |
Defined in Ganeti.BasicTypes | |
(Monad m, Error a, Monoid a) => Alternative (ResultT a m) # | |
(Monad m, Error a, Monoid a) => MonadPlus (ResultT a m) # | |
(MonadIO m, Error a) => MonadIO (ResultT a m) # | The instance catches any This way, monadic code within Other exceptions (see instances of |
Defined in Ganeti.BasicTypes | |
(MonadLog m, Error e) => MonadLog (ResultT e m) # | |
Defined in Ganeti.Logging | |
type StT (ResultT a) b # | |
Defined in Ganeti.BasicTypes | |
type StM (ResultT a m) b # | |
Defined in Ganeti.BasicTypes |
elimResultT :: Monad m => (a -> ResultT a' m b') -> (b -> ResultT a' m b') -> ResultT a m b -> ResultT a' m b' Source #
Eliminates a ResultT
value given appropriate continuations
withError :: MonadError e m => (e' -> e) -> GenericResult e' a -> m a Source #
Changes the error message of a result value, if present.
Note that since GenericResult
is also a MonadError
, this function
is a generalization of
(Error e') => (e' -> e) -> GenericResult e' a -> GenericResult e a
withErrorT :: (Monad m, Error e) => (e' -> e) -> ResultT e' m a -> ResultT e m a Source #
Changes the error message of a ResultT
value, if present.
toError :: MonadError e m => GenericResult e a -> m a Source #
toErrorBase :: (MonadBase b m, MonadError e m) => ResultT e b a -> m a Source #
Lift a ResultT
value into any MonadError
with the same base monad.
toErrorStr :: (MonadError e m, Error e) => Result a -> m a Source #
An alias for withError strMsg
, which is often used to lift a pure error
to a monad stack. See also annotateResult
.
tryError :: MonadError e m => m a -> m (Either e a) Source #
Run a given computation and if an error occurs, return it as Left
of
Either
.
This is a generalized version of try
.
mkResultT :: (Monad m, Error e) => m (Result a) -> ResultT e m a Source #
Converts a monadic result with a String
message into
a ResultT
with an arbitrary Error
.
Expects that the given action has already taken care of any possible
errors. In particular, if applied on IO (Result a)
, any exceptions
should be handled by the given action.
See also toErrorStr
.
isOk :: GenericResult a b -> Bool Source #
Simple checker for whether a GenericResult
is OK.
isBad :: GenericResult a b -> Bool Source #
Simple checker for whether a GenericResult
is a failure.
justOk :: [GenericResult a b] -> [b] Source #
Simple filter returning only OK values of GenericResult
justBad :: [GenericResult a b] -> [a] Source #
Simple filter returning only Bad values of GenericResult
eitherToResult :: Either a b -> GenericResult a b Source #
Converter from Either to GenericResult
.
isLeft :: Either a b -> Bool Source #
Check if an either is Left. Equivalent to isLeft from Data.Either version 4.7.0.0 or higher.
isRight :: Either a b -> Bool Source #
Check if an either is Right. Equivalent to isRight from Data.Either version 4.7.0.0 or higher.
annotateResult :: (MonadError e m, Error e) => String -> Result a -> m a Source #
Annotate an error with an ownership information, lifting it to a
MonadError
. Since Result
is an instance of MonadError
itself,
it's a generalization of type String -> Result a -> Result a
.
See also toErrorStr
.
annotateError :: (MonadError e m, Error e, Monoid e) => String -> m a -> m a Source #
Annotate an error with an ownership information inside a MonadError
.
See also annotateResult
.
failError :: (MonadError e m, Error e) => String -> m a Source #
Throws a String
message as an error in a MonadError
.
This is a generalization of Bad
.
It's similar to fail
, but works within a MonadError
, avoiding the
unsafe nature of fail
.
handleErrorT :: (Monad m, Error e) => (e' -> ResultT e m a) -> ResultT e' m a -> ResultT e m a Source #
A synonym for flip
catchErrorT
.
catchErrorT :: (Monad m, Error e) => ResultT e' m a -> (e' -> ResultT e m a) -> ResultT e m a Source #
Catches an error in a ResultT
value. This is similar to catchError
,
but in addition allows to change the error type.
orElse :: MonadError e m => m a -> m a -> m a Source #
If the first computation fails, run the second one.
Unlike mplus
instance for ResultT
, this doesn't require
the Monoid
constrait.
iterateOk :: (a -> GenericResult b a) -> a -> [a] Source #
Iterate while Ok.
Misc functionality
:: a | default result |
-> [(Bool, a)] | list of "condition, result" |
-> a | first result which has a True condition, or default |
Return the first result with a True condition, or the default otherwise.
runListHead :: a -> (b -> a) -> [b] -> a Source #
Apply a function to the first element of a list, return the default value, if the list is empty. This is just a convenient combination of maybe and listToMaybe.
Lookup of partial names functionality
data MatchPriority Source #
The priority of a match in a lookup result.
Instances
data LookupResult Source #
The result of a name lookup in a list.
LookupResult | |
|
Instances
Eq LookupResult # | Lookup results have an absolute preference ordering. |
Defined in Ganeti.BasicTypes (==) :: LookupResult -> LookupResult -> Bool (/=) :: LookupResult -> LookupResult -> Bool | |
Ord LookupResult # | |
Defined in Ganeti.BasicTypes compare :: LookupResult -> LookupResult -> Ordering (<) :: LookupResult -> LookupResult -> Bool (<=) :: LookupResult -> LookupResult -> Bool (>) :: LookupResult -> LookupResult -> Bool (>=) :: LookupResult -> LookupResult -> Bool max :: LookupResult -> LookupResult -> LookupResult min :: LookupResult -> LookupResult -> LookupResult | |
Show LookupResult # | |
Defined in Ganeti.BasicTypes showsPrec :: Int -> LookupResult -> ShowS show :: LookupResult -> String showList :: [LookupResult] -> ShowS |
:: String | Lookup |
-> String | Full name |
-> Bool | Whether there is a prefix match |
Check for prefix matches in names. Implemented in Ganeti core utils.text.MatchNameComponent as the regexp r"^%s(..*)?$" % re.escape(key)
goodMatchPriority :: MatchPriority -> Bool Source #
Is the lookup priority a "good" one?
goodLookupResult :: LookupResult -> Bool Source #
Is the lookup result an actual match?
:: String | Canonical (target) name |
-> String | Partial (lookup) name |
-> LookupResult | Result of the lookup |
Compares a canonical name and a lookup string.
:: String | Lookup key |
-> String | String to compare to the lookup key |
-> LookupResult | Previous result |
-> LookupResult | New result |
Lookup a string and choose the best result.
:: [String] | List of keys |
-> String | Lookup string |
-> LookupResult | Result of the lookup |
Find the canonical name for a lookup string in a list of names.
Wrapper for a Haskell Set
This type wraps a Set
and it is used in the Haskell to Python
opcode generation to transform a Haskell Set
into a Python list
without duplicate elements.
emptyListSet :: ListSet a Source #