| Copyright | (c) Dennis Gosnell, 2016 |
|---|---|
| License | BSD-style (see LICENSE file) |
| Maintainer | cdep.illabout@gmail.com |
| Stability | experimental |
| Portability | POSIX |
| Safe Haskell | Safe |
| Language | Haskell2010 |
Control.FromSum
Contents
- fromEitherM :: Applicative m => (e -> m a) -> Either e a -> m a
- fromEitherOrM :: Applicative m => Either e a -> (e -> m a) -> m a
- fromMaybeM :: Applicative m => m a -> Maybe a -> m a
- fromMaybeOrM :: Applicative m => Maybe a -> m a -> m a
- fromEitherMM :: Monad m => (e -> m a) -> m (Either e a) -> m a
- fromEitherOrMM :: Monad m => m (Either e a) -> (e -> m a) -> m a
- fromMaybeMM :: Monad m => m a -> m (Maybe a) -> m a
- fromMaybeOrMM :: Monad m => m (Maybe a) -> m a -> m a
- fromEither :: (e -> a) -> Either e a -> a
- fromEitherOr :: Either e a -> (e -> a) -> a
- fromMaybe :: a -> Maybe a -> a
- fromMaybeOr :: Maybe a -> a -> a
Monadic in return value
fromEitherM :: Applicative m => (e -> m a) -> Either e a -> m a Source #
A monadic version of fromEither.
fromEitherMleftAction ===eitherleftActionpure
>>>fromEitherM (\s -> [length s]) $ Right 5[5]>>>fromEitherM (\s -> [length s]) $ Left ("foo" :: String)[3]
fromEitherOrM :: Applicative m => Either e a -> (e -> m a) -> m a Source #
A fliped version of fromEitherM.
>>>fromEitherOrM (Right 5) $ \s -> [length s][5]
This can be nice to use as an error handler.
>>>fromEitherOrM (Right 5) $ \s -> putStrLn ("error: " ++ s) >> undefined5>>>fromEitherOrM (Left "foo") $ \s -> putStrLn ("error: " ++ s) >> undefinederror: foo ...
fromMaybeM :: Applicative m => m a -> Maybe a -> m a Source #
A monadic version of fromMaybe.
fromMaybeMnothingAction ===maybenothingActionpure
>>>fromMaybeM [] $ Just 5[5]>>>fromMaybeM [] Nothing[]
fromMaybeOrM :: Applicative m => Maybe a -> m a -> m a Source #
A fliped version of fromMaybeM.
>>>fromMaybeOrM (Just 5) [][5]
This can be nice to use as an error handler.
>>>fromMaybeOrM (Just 5) $ putStrLn "some error occurred" >> undefined5>>>fromMaybeOrM (Nothing) $ putStrLn "some error occurred" >> undefinedsome error occurred ...
Monadic in both return and sum-type value
fromEitherMM :: Monad m => (e -> m a) -> m (Either e a) -> m a Source #
Similar to fromEitherM but the Either argument is also a monadic value.
>>>fromEitherMM (\s -> [length s]) [Right 5, Right 10][5,10]>>>fromEitherMM (\s -> [length s]) [Left ("foo" :: String), Right 100][3,100]
NOTE: I don't particularly like the name of this function. If you have a suggestion for a better name, please submit a PR or issue.
fromEitherOrMM :: Monad m => m (Either e a) -> (e -> m a) -> m a Source #
A fliped version of fromEitherMM.
fromMaybeMM :: Monad m => m a -> m (Maybe a) -> m a Source #
Similar to fromMaybeM but the Maybe argument is also a monadic value.
>>>fromMaybeMM [] [Just 6, Just 5][6,5]>>>fromMaybeMM [] [Just 6, Nothing, Just 7][6,7]
NOTE: I don't particularly like the name of this function. If you have a suggestion for a better name, please submit a PR or issue.
fromMaybeOrMM :: Monad m => m (Maybe a) -> m a -> m a Source #
A fliped version of fromMaybeMM.
Completely non-monadic functions
fromEither :: (e -> a) -> Either e a -> a Source #
Similar to fromMaybe.
>>>fromEither show $ Left 5"5">>>fromEither show $ Right "hello""hello"
fromEitherOr :: Either e a -> (e -> a) -> a Source #
A fliped version of fromEither.
fromMaybe :: a -> Maybe a -> a #
The fromMaybe function takes a default value and and Maybe
value. If the Maybe is Nothing, it returns the default values;
otherwise, it returns the value contained in the Maybe.
Examples
Basic usage:
>>>fromMaybe "" (Just "Hello, World!")"Hello, World!"
>>>fromMaybe "" Nothing""
Read an integer from a string using readMaybe. If we fail to
parse an integer, we want to return 0 by default:
>>>import Text.Read ( readMaybe )>>>fromMaybe 0 (readMaybe "5")5>>>fromMaybe 0 (readMaybe "")0