{-# LANGUAGE EmptyDataDecls, TypeOperators #-}
-- | This module contains a few type signatures to help replace pure
-- specifications by their effectful counterparts.
module Test.IOSpec.Surrogate
  (
  -- * The IOSpec type
    IOSpec
  -- * The specifications
  , ForkS
  , MVarS
  , IORefS
  , STMS
  , Teletype
  , (:+:)
  )
  where

-- | The @IOSpec f a@ is merely type synonym for @IO a@. Once you've
-- tested a module, you can use these definitions to avoid having to
-- change your type signatures.
--
-- Note that because this definition of 'IOSpec' ignores its @f@
-- argument, each of 'ForkS', 'MVarS', etc., is simply an empty data
-- type.
type IOSpec f a  = IO a

data ForkS
data MVarS
data IORefS
data STMS
data Teletype
data (f :+: g)