module Global (
    when, forever, unless, void, Map, mapMaybe, fromMaybe
    , (<>)
    , Text, txt, untxt, showt
    , whenJust, concatMapM
) where
import qualified Control.Monad as Monad
import Control.Monad (when, forever, unless, void)
import Data.Map (Map)
import Data.Maybe (mapMaybe, fromMaybe)
import Data.Monoid ((<>))
import qualified Data.Text as Text
import Data.Text (Text)


txt :: String -> Text
txt = Text.pack

untxt :: Text -> String
untxt = Text.unpack

showt :: Show a => a -> Text
showt = txt . show

whenJust :: Monad m => Maybe a -> (a -> m ()) -> m ()
whenJust ma f = maybe (return ()) f ma

concatMapM :: (Monad m, Monoid b) => (a -> m b) -> [a] -> m b
concatMapM f = Monad.liftM mconcat . mapM f