module EVM.Demand (demand) where import Control.DeepSeq (NFData, force) import Control.Exception.Base (evaluate) import Control.Monad.IO.Class (MonadIO, liftIO) -- | This is an easy way to force full evaluation of a value inside of -- the IO monad, being essentially just the composition of @evaluate@ -- and @force@. demand :: (MonadIO m, NFData a) => a -> m () demand x = do _ <- liftIO (evaluate (force x)) return ()