-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Canonical fromMaybeM and fromEitherM functions. -- -- Provides many functions for working with Maybe and -- Either. Please see README.md. @package from-sum @version 0.2.2.0 -- | This Haskell module exports various "from" functions for Either -- and Maybe. module Control.FromSum -- | A monadic version of fromEither. -- --
-- fromEitherM leftAction === either leftAction pure ---- --
-- >>> fromEitherM (\s -> [length s]) $ Right 5
-- [5]
--
-- >>> fromEitherM (\s -> [length s]) $ Left ("foo" :: String)
-- [3]
--
fromEitherM :: Applicative m => (e -> m a) -> Either e a -> m a
-- | 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) >> undefined
-- 5
--
-- >>> fromEitherOrM (Left "foo") $ \s -> putStrLn ("error: " ++ s) >> undefined
-- error: foo
-- ...
--
fromEitherOrM :: Applicative m => Either e a -> (e -> m a) -> m a
-- | Similar to fromEitherM, but only run the monadic
-- leftAction if the Either argument is Left.
-- Otherwise, return pure mempty.
--
-- -- fromEitherM_ leftAction === either leftAction (const $ pure mempty) ---- --
-- >>> fromEitherM_ (\err -> putStrLn err >> pure "bye") $ Right 5 -- "" -- -- >>> fromEitherM_ (\err -> putStrLn err >> pure "bye") $ Left "there was an error" -- there was an error -- "bye" ---- -- This can be convenient when you want to run some sort of logging -- function whenever an Either is Left. If you imagine the -- logging function is b -> IO '()', then the -- effective type of fromEitherM_ becomes fromEitherM_ -- :: (e -> IO '()') -> Either e a -> IO -- '()', because '()' has a Monoid instance, and IO, -- has an Applicative instance. -- --
-- >>> fromEitherM_ putStrLn $ Left "there was an error" -- there was an error --fromEitherM_ :: (Applicative m, Monoid b) => (e -> m b) -> Either e a -> m b -- | A fliped version of fromEitherM_. fromEitherOrM_ :: (Applicative m, Monoid b) => Either e a -> (e -> m b) -> m b -- | A monadic version of fromMaybe. -- --
-- fromMaybeM nothingAction === maybe nothingAction pure ---- --
-- >>> fromMaybeM [] $ Just 5 -- [5] -- -- >>> fromMaybeM [] Nothing -- [] --fromMaybeM :: Applicative m => m a -> Maybe a -> m a -- | 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" >> undefined -- 5 -- -- >>> fromMaybeOrM (Nothing) $ putStrLn "some error occurred" >> undefined -- some error occurred -- ... --fromMaybeOrM :: Applicative m => Maybe a -> m a -> m a -- | Similar to fromMaybeM, but only run the monadic -- nothingAction if the Maybe argument is Nothing. -- Otherwise, return pure mempty. -- --
-- fromMaybeM_ nothingAction === maybe nothingAction (const $ pure mempty) ---- --
-- >>> fromMaybeM_ (putStrLn "hello" >> pure "bye") $ Just 5 -- "" -- -- >>> fromMaybeM_ (putStrLn "hello" >> pure "bye") Nothing -- hello -- "bye" ---- -- This can be convenient when you want to run some sort of logging -- function whenever a Maybe is Nothing. If you imagine the -- logging function is IO '()', then the effective type -- of fromMaybeM_ becomes fromMaybeM_ :: IO '()' -- -> Maybe a -> IO '()', because '()' has a -- Monoid instance, and IO, has an Applicative -- instance. -- --
-- >>> fromMaybeM_ (putStrLn "hello") Nothing -- hello --fromMaybeM_ :: (Applicative m, Monoid b) => m b -> Maybe a -> m b -- | A fliped version of fromMaybeM. fromMaybeOrM_ :: (Applicative m, Monoid b) => Maybe a -> m b -> m b -- | 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.
fromEitherMM :: Monad m => (e -> m a) -> m (Either e a) -> m a
-- | A fliped version of fromEitherMM.
fromEitherOrMM :: Monad m => m (Either e a) -> (e -> m a) -> m a
-- | 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. fromMaybeMM :: Monad m => m a -> m (Maybe a) -> m a -- | A fliped version of fromMaybeMM. fromMaybeOrMM :: Monad m => m (Maybe a) -> m a -> m a -- | Similar to fromMaybe. -- --
-- >>> fromEither show $ Left 5 -- "5" -- -- >>> fromEither show $ Right "hello" -- "hello" --fromEither :: (e -> a) -> Either e a -> a -- | A fliped version of fromEither. fromEitherOr :: Either e a -> (e -> 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. -- --
-- >>> 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 --fromMaybe :: () => a -> Maybe a -> a -- | A fliped version of fromMaybe. fromMaybeOr :: Maybe a -> a -> a -- | Convert a Maybe to an Either. -- -- If the Maybe is Just, then return the value in -- Right. -- --
-- >>> maybeToEither 3 $ Just "hello" -- Right "hello" ---- -- If the Maybe is Nothing, then use the given e -- as Left. -- --
-- >>> maybeToEither 3 Nothing -- Left 3 --maybeToEither :: e -> Maybe a -> Either e a -- | A fliped version of maybeToEither. -- --
-- >>> maybeToEitherOr (Just "hello") 3 -- Right "hello" ---- --
-- >>> maybeToEitherOr Nothing 3 -- Left 3 --maybeToEitherOr :: Maybe a -> e -> Either e a -- | Convert an Either to a Maybe. -- -- A Right value becomes Just. -- --
-- >>> eitherToMaybe $ Right 3 -- Just 3 ---- -- A Left value becomes Nothing. -- --
-- >>> eitherToMaybe $ Left "bye" -- Nothing --eitherToMaybe :: Either e a -> Maybe a -- | Collapse an Either a a to an a. Defined as -- fromEither id. -- -- Note: Other libraries export this function as fromEither, but -- our fromEither function is slightly more general. -- --
-- >>> collapseEither (Right 3) -- 3 -- -- >>> collapseEither (Left "hello") -- "hello" --collapseEither :: Either a a -> a -- | Similar to collapseEither, but for ExceptT. -- --
-- >>> import Control.Monad.Trans.Except (ExceptT(ExceptT)) -- -- >>> collapseExceptT (ExceptT $ pure (Right 3)) -- 3 -- -- >>> collapseExceptT (ExceptT $ pure (Left "hello")) -- "hello" --collapseExceptT :: Monad m => ExceptT a m a -> m a