{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE TypeFamilies #-}
module Test.Hspec.Control where
import Control.Monad.Base
import Control.Monad.Trans.Control
import Control.Monad.Trans.Writer
import Data.Functor (($>))
import Test.Hspec.Core.Spec
instance MonadBase IO (SpecM a) where
liftBase = runIO
instance MonadBaseControl IO (SpecM a) where
type StM (SpecM a) r = (r, [SpecTree a])
liftBaseWith f = runIO (f runSpecM')
where runSpecM' (SpecM specs) = runWriterT specs
restoreM (r, specs) = fromSpecList specs $> r