bdd-0.1.0.0: src/Test/Bdd/Internal.hs
{-# LANGUAGE ExistentialQuantification, FlexibleInstances, MultiParamTypeClasses, Rank2Types #-}
module Test.Bdd.Internal (
GivenStore(..)
,GivenWithTeardown
,StorableAsGivenWithTeardown(..)
) where
data GivenStore m = forall a. GivenStore (m a, a -> m ())
type GivenWithTeardown m = Monad m => [GivenStore m]
class StorableAsGivenWithTeardown m g where
mkGiven :: g -> GivenWithTeardown m
instance StorableAsGivenWithTeardown m (m a) where
mkGiven g = [GivenStore (g,const (return ()))]
instance StorableAsGivenWithTeardown m (m a, a -> m ()) where
mkGiven = return . GivenStore