test-monad-laws-0.0.0.0: Laws for mtl classes as QuickCheck properties.

Safe HaskellNone
LanguageHaskell2010

Test.Mutants

Description

A manual mutation testing framework for monads and transformers.

Synopsis

Documentation

newtype Mutant v t (m :: Type -> Type) a Source #

The type Mutant v t m a is isomorphic to t m a, and inherits various instances from it.

class MyClass m where
  myMethod :: m ()

deriving instance MyClass (t m) => MyClass (Mutant v t m)

The first parameter v is phantom, and identifies a "mutation".

A new mutation can be declared as a datatype.

data BugInMyClass

Use overlapping instances to "mutate" an implementation.

instance {-# OVERLAPPING #-} MyClass (Mutant BugInMyClass t m) where
  myMethod = wrongMethod

Constructors

Mutant 

Fields

Instances
Monad m => MonadState s (MutantStateT s m) Source # 
Instance details

Defined in Test.Monad.State.Mutants

Methods

get :: MutantStateT s m s #

put :: s -> MutantStateT s m () #

state :: (s -> (a, s)) -> MutantStateT s m a #

MonadError (e, s) m => MonadError e (MutantRStateT s m) Source # 
Instance details

Defined in Test.Monad.Except.Mutants

Methods

throwError :: e -> MutantRStateT s m a #

catchError :: MutantRStateT s m a -> (e -> MutantRStateT s m a) -> MutantRStateT s m a #

Monad m => MonadError e (MutantExcept2T e m) Source # 
Instance details

Defined in Test.Monad.Except.Mutants

Methods

throwError :: e -> MutantExcept2T e m a #

catchError :: MutantExcept2T e m a -> (e -> MutantExcept2T e m a) -> MutantExcept2T e m a #

Monad m => MonadError e (MutantExcept1T e m) Source # 
Instance details

Defined in Test.Monad.Except.Mutants

Methods

throwError :: e -> MutantExcept1T e m a #

catchError :: MutantExcept1T e m a -> (e -> MutantExcept1T e m a) -> MutantExcept1T e m a #

MonadWriter w (t m) => MonadWriter w (Mutant v t m) Source # 
Instance details

Defined in Test.Mutants

Methods

writer :: (a, w) -> Mutant v t m a #

tell :: w -> Mutant v t m () #

listen :: Mutant v t m a -> Mutant v t m (a, w) #

pass :: Mutant v t m (a, w -> w) -> Mutant v t m a #

(Monad m, Monoid w) => MonadWriter w (Mutant PassDoesNothing (WriterT w) m) Source # 
Instance details

Defined in Test.Monad.Writer.Mutants

(Monad m, Monoid w) => MonadWriter w (Mutant ListenResets (WriterT w) m) Source # 
Instance details

Defined in Test.Monad.Writer.Mutants

Methods

writer :: (a, w) -> Mutant ListenResets (WriterT w) m a #

tell :: w -> Mutant ListenResets (WriterT w) m () #

listen :: Mutant ListenResets (WriterT w) m a -> Mutant ListenResets (WriterT w) m (a, w) #

pass :: Mutant ListenResets (WriterT w) m (a, w -> w) -> Mutant ListenResets (WriterT w) m a #

(Monad m, Monoid w) => MonadWriter w (Mutant ListenDoesNothing (WriterT w) m) Source # 
Instance details

Defined in Test.Monad.Writer.Mutants

(Monad m, Monoid w) => MonadWriter w (Mutant TellDoesNothing (WriterT w) m) Source # 
Instance details

Defined in Test.Monad.Writer.Mutants

MonadState s (t m) => MonadState s (Mutant v t m) Source # 
Instance details

Defined in Test.Mutants

Methods

get :: Mutant v t m s #

put :: s -> Mutant v t m () #

state :: (s -> (a, s)) -> Mutant v t m a #

MonadReader r (t m) => MonadReader r (Mutant v t m) Source # 
Instance details

Defined in Test.Mutants

Methods

ask :: Mutant v t m r #

local :: (r -> r) -> Mutant v t m a -> Mutant v t m a #

reader :: (r -> a) -> Mutant v t m a #

Monad m => MonadReader r (Mutant LocalRunsTwice (ReaderT r :: (Type -> Type) -> Type -> Type) m) Source # 
Instance details

Defined in Test.Monad.Reader.Mutants

Methods

ask :: Mutant LocalRunsTwice (ReaderT r) m r #

local :: (r -> r) -> Mutant LocalRunsTwice (ReaderT r) m a -> Mutant LocalRunsTwice (ReaderT r) m a #

reader :: (r -> a) -> Mutant LocalRunsTwice (ReaderT r) m a #

Monad m => MonadReader r (Mutant LocalId (ReaderT r :: (Type -> Type) -> Type -> Type) m) Source # 
Instance details

Defined in Test.Monad.Reader.Mutants

Methods

ask :: Mutant LocalId (ReaderT r) m r #

local :: (r -> r) -> Mutant LocalId (ReaderT r) m a -> Mutant LocalId (ReaderT r) m a #

reader :: (r -> a) -> Mutant LocalId (ReaderT r) m a #

MonadError e (t m) => MonadError e (Mutant v t m) Source # 
Instance details

Defined in Test.Mutants

Methods

throwError :: e -> Mutant v t m a #

catchError :: Mutant v t m a -> (e -> Mutant v t m a) -> Mutant v t m a #

MonadTrans (Mutant LiftMaybeDiscard MaybeT) Source # 
Instance details

Defined in Test.Monad.Trans.Mutants

Methods

lift :: Monad m => m a -> Mutant LiftMaybeDiscard MaybeT m a #

MonadTrans (Mutant LiftMaybeNothing MaybeT) Source # 
Instance details

Defined in Test.Monad.Trans.Mutants

Methods

lift :: Monad m => m a -> Mutant LiftMaybeNothing MaybeT m a #

MonadTrans t => MonadTrans (Mutant LiftTwice t) Source # 
Instance details

Defined in Test.Monad.Trans.Mutants

Methods

lift :: Monad m => m a -> Mutant LiftTwice t m a #

MonadTrans t => MonadTrans (Mutant v t) Source # 
Instance details

Defined in Test.Mutants

Methods

lift :: Monad m => m a -> Mutant v t m a #

MonadTransControl (Mutant RestoreDropState (StateT s)) Source # 
Instance details

Defined in Test.Monad.Control.Mutants

Associated Types

type StT (Mutant RestoreDropState (StateT s)) a :: Type #

MonadTransControl (Mutant LiftWithDropState (StateT s)) Source # 
Instance details

Defined in Test.Monad.Control.Mutants

Associated Types

type StT (Mutant LiftWithDropState (StateT s)) a :: Type #

MonadTransControl t => MonadTransControl (Mutant RestoreTwice t) Source # 
Instance details

Defined in Test.Monad.Control.Mutants

Associated Types

type StT (Mutant RestoreTwice t) a :: Type #

Methods

liftWith :: Monad m => (Run (Mutant RestoreTwice t) -> m a) -> Mutant RestoreTwice t m a #

restoreT :: Monad m => m (StT (Mutant RestoreTwice t) a) -> Mutant RestoreTwice t m a #

MonadTransControl t => MonadTransControl (Mutant RunTwice t) Source # 
Instance details

Defined in Test.Monad.Control.Mutants

Associated Types

type StT (Mutant RunTwice t) a :: Type #

Methods

liftWith :: Monad m => (Run (Mutant RunTwice t) -> m a) -> Mutant RunTwice t m a #

restoreT :: Monad m => m (StT (Mutant RunTwice t) a) -> Mutant RunTwice t m a #

MonadTransControl t => MonadTransControl (Mutant LiftWithTwice t) Source #

There should be no blanket OVERLAPPABLE instance because of the type family.

Instance details

Defined in Test.Monad.Control.Mutants

Associated Types

type StT (Mutant LiftWithTwice t) a :: Type #

Methods

liftWith :: Monad m => (Run (Mutant LiftWithTwice t) -> m a) -> Mutant LiftWithTwice t m a #

restoreT :: Monad m => m (StT (Mutant LiftWithTwice t) a) -> Mutant LiftWithTwice t m a #

Monad (t m) => Monad (Mutant v t m) Source # 
Instance details

Defined in Test.Mutants

Methods

(>>=) :: Mutant v t m a -> (a -> Mutant v t m b) -> Mutant v t m b #

(>>) :: Mutant v t m a -> Mutant v t m b -> Mutant v t m b #

return :: a -> Mutant v t m a #

fail :: String -> Mutant v t m a #

Functor (t m) => Functor (Mutant v t m) Source # 
Instance details

Defined in Test.Mutants

Methods

fmap :: (a -> b) -> Mutant v t m a -> Mutant v t m b #

(<$) :: a -> Mutant v t m b -> Mutant v t m a #

Applicative (t m) => Applicative (Mutant v t m) Source # 
Instance details

Defined in Test.Mutants

Methods

pure :: a -> Mutant v t m a #

(<*>) :: Mutant v t m (a -> b) -> Mutant v t m a -> Mutant v t m b #

liftA2 :: (a -> b -> c) -> Mutant v t m a -> Mutant v t m b -> Mutant v t m c #

(*>) :: Mutant v t m a -> Mutant v t m b -> Mutant v t m b #

(<*) :: Mutant v t m a -> Mutant v t m b -> Mutant v t m a #

Alternative (t m) => Alternative (Mutant v t m) Source # 
Instance details

Defined in Test.Mutants

Methods

empty :: Mutant v t m a #

(<|>) :: Mutant v t m a -> Mutant v t m a -> Mutant v t m a #

some :: Mutant v t m a -> Mutant v t m [a] #

many :: Mutant v t m a -> Mutant v t m [a] #

MonadPlus (t m) => MonadPlus (Mutant v t m) Source # 
Instance details

Defined in Test.Mutants

Methods

mzero :: Mutant v t m a #

mplus :: Mutant v t m a -> Mutant v t m a -> Mutant v t m a #

Eq (t m a) => Eq (Mutant v t m a) Source # 
Instance details

Defined in Test.Mutants

Methods

(==) :: Mutant v t m a -> Mutant v t m a -> Bool #

(/=) :: Mutant v t m a -> Mutant v t m a -> Bool #

Ord (t m a) => Ord (Mutant v t m a) Source # 
Instance details

Defined in Test.Mutants

Methods

compare :: Mutant v t m a -> Mutant v t m a -> Ordering #

(<) :: Mutant v t m a -> Mutant v t m a -> Bool #

(<=) :: Mutant v t m a -> Mutant v t m a -> Bool #

(>) :: Mutant v t m a -> Mutant v t m a -> Bool #

(>=) :: Mutant v t m a -> Mutant v t m a -> Bool #

max :: Mutant v t m a -> Mutant v t m a -> Mutant v t m a #

min :: Mutant v t m a -> Mutant v t m a -> Mutant v t m a #

Show (t m a) => Show (Mutant v t m a) Source # 
Instance details

Defined in Test.Mutants

Methods

showsPrec :: Int -> Mutant v t m a -> ShowS #

show :: Mutant v t m a -> String #

showList :: [Mutant v t m a] -> ShowS #

Arbitrary (t m a) => Arbitrary (Mutant v t m a) Source # 
Instance details

Defined in Test.Mutants

Methods

arbitrary :: Gen (Mutant v t m a) #

shrink :: Mutant v t m a -> [Mutant v t m a] #

TestEq (t m a) => TestEq (Mutant v t m a) Source # 
Instance details

Defined in Test.Mutants

Methods

(=?) :: Mutant v t m a -> Mutant v t m a -> Property #

Constructible (t m a) => Constructible (Mutant v t m a) Source # 
Instance details

Defined in Test.Mutants

Associated Types

type Repr (Mutant v t m a) :: Type #

Methods

fromRepr :: Repr (Mutant v t m a) -> Mutant v t m a #

type StT (Mutant RestoreDropState (StateT s)) a Source # 
Instance details

Defined in Test.Monad.Control.Mutants

type StT (Mutant LiftWithDropState (StateT s)) a Source # 
Instance details

Defined in Test.Monad.Control.Mutants

type StT (Mutant RestoreTwice t) a Source # 
Instance details

Defined in Test.Monad.Control.Mutants

type StT (Mutant RestoreTwice t) a = StT t a
type StT (Mutant RunTwice t) a Source # 
Instance details

Defined in Test.Monad.Control.Mutants

type StT (Mutant RunTwice t) a = StT t a
type StT (Mutant LiftWithTwice t) a Source # 
Instance details

Defined in Test.Monad.Control.Mutants

type StT (Mutant LiftWithTwice t) a = StT t a
type Repr (Mutant v t m a) Source # 
Instance details

Defined in Test.Mutants

type Repr (Mutant v t m a) = Repr (t m a)