    pure fa
{-# INLINE (=<<&) #-}

-- The void function implemented with Functor / Applicative or Monad is slow.
-- GHC cannot optimize it, especially when using in IO monad, it could slow
-- down function even more than 10 times (!).
void :: m a -> m ()
void = unsafeCoerce ; {-# INLINE void #-}

when  , unless   :: (Applicative m, Mempty a) =>   Bool -> m a -> m a
when_ , unless_  :: (Applicative m)           =>   Bool -> m a -> m ()
whenM , unlessM  :: (Monad m      , Mempty a) => m Bool -> m a -> m a
whenM_, unlessM_ :: (Monad m      )           => m Bool -> m a -> m ()
when     p s = ifThenElse p s             (pure mempty) ; {-# INLINE when     #-}