module Calamity.Internal.Utils
( whenJust
, whenM
, unlessM
, lastMaybe
, (<<$>>)
, debug
, info
, Calamity.Internal.Utils.error
, swap ) where
import Calamity.LogEff
import qualified Data.HashMap.Lazy as LH
import Data.Semigroup ( Last(..) )
import Data.Text.Lazy
import Data.Time
import qualified Data.Vector.Unboxed as VU
import Data.Vector.Unboxed ( Vector )
import qualified DiPolysemy as Di
import qualified Polysemy as P
import TextShow
whenJust :: Applicative m => Maybe a -> (a -> m ()) -> m ()
whenJust = flip $ maybe (pure ())
whenM :: Monad m => m Bool -> m () -> m ()
whenM p m = p >>= \case
True -> m
_ -> pure ()
unlessM :: Monad m => m Bool -> m () -> m ()
unlessM = whenM . (not <$>)
lastMaybe :: Maybe a -> Maybe a -> Maybe a
lastMaybe l r = getLast <$> fmap Last l <> fmap Last r
(<<$>>) :: (Functor f, Functor g) => (a -> b) -> f (g a) -> f (g b)
(<<$>>) = fmap . fmap
infixl 4 <<$>>
debug :: P.Member LogEff r => Text -> P.Sem r ()
debug = Di.debug
info :: P.Member LogEff r => Text -> P.Sem r ()
info = Di.info
error :: P.Member LogEff r => Text -> P.Sem r ()
error = Di.error
swap :: (a, b) -> (b, a)
swap ~(a, b) = (b, a)
instance TextShow UTCTime where
showb = fromString . show
instance (TextShow a, VU.Unbox a) => TextShow (Vector a) where
showb = showbList . VU.toList
instance (Show k, Show v) => TextShow (LH.HashMap k v) where
showb = fromString . show