agda-unused-0.2.0: src/Agda/Unused/Utils.hs
{- |
Module: Agda.Unused.Utils
Utility functions for 'Maybe', 'Either', and 'Map' types.
-}
module Agda.Unused.Utils
( -- * Maybe
liftMaybe
-- * Either
, mapLeft
-- * List
, stripSuffix
) where
import Control.Monad.Except
(MonadError, throwError)
import Data.List
(stripPrefix)
-- ## Maybe
-- | Lift a 'Maybe' type to an error monad by throwing a fixed error.
liftMaybe
:: MonadError e m
=> e
-> Maybe a
-> m a
liftMaybe e Nothing
= throwError e
liftMaybe _ (Just x)
= pure x
-- ## Either
-- | Map the left component of an 'Either' type.
mapLeft
:: (e -> f)
-> Either e a
-> Either f a
mapLeft f (Left e)
= Left (f e)
mapLeft _ (Right x)
= Right x
-- ## List
-- | Drop the given suffix from a list.
stripSuffix
:: Eq a
=> [a]
-> [a]
-> Maybe [a]
stripSuffix xs ys
= reverse <$> stripPrefix (reverse xs) (reverse ys)