module Yam.Import( Text , pack , cs , showText , lift , MonadIO , liftIO , when , unless , void , (<>) , myThreadId , ThreadId , killThread , fromMaybe , maybe , mapMaybe , catMaybes , selectMaybe , finally , MonadMask , MonadThrow , MonadCatch , catchAll , runReaderT , ReaderT , ask , Generic , UTCTime , randomHex , Proxy(..) ) where import Control.Concurrent import Control.Monad (unless, void, when) import Control.Monad.Catch import Control.Monad.IO.Class (MonadIO, liftIO) import Control.Monad.Trans.Class import Control.Monad.Trans.Reader (ReaderT, ask, runReaderT) import Data.Maybe import Data.Monoid ((<>)) import Data.Proxy import Data.String.Conversions (cs) import Data.Text (Text, pack) import Data.Time.Clock import GHC.Generics import System.Random (newStdGen, randoms) showText :: Show a => a -> Text showText = cs . show _hex = ['0'..'9'] <> ['a'..'f'] randomHex :: Int -> IO Text randomHex n = (pack . map (go _hex 16) . take n . randoms) <$> newStdGen where go gs l v = gs !! mod v l selectMaybe :: [Maybe a] -> Maybe a selectMaybe = listToMaybe . catMaybes