module Control.Monad.Compat (
module Base
, Monad(..)
, MonadPlus(..)
, void
, (<$!>)
) where
import Control.Monad as Base
#if !MIN_VERSION_base(4,3,0)
import Data.Function (const)
import Data.Functor (Functor(..))
#endif
#if !MIN_VERSION_base(4,8,0)
import Prelude.Compat (seq)
#endif
#if !MIN_VERSION_base(4,3,0)
void :: Functor f => f a -> f ()
void = fmap (const ())
#endif
#if !MIN_VERSION_base(4,8,0)
infixl 4 <$!>
(<$!>) :: Monad m => (a -> b) -> m a -> m b
f <$!> m = do
x <- m
let z = f x
z `seq` return z
#endif