test-monad-laws-0.0.0.0: src/Test/Monad/Reader/Mutants.hs
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
module Test.Monad.Reader.Mutants where
import Control.Monad.Reader
import Data.Functor.Identity
import Test.Mutants
data LocalId
instance {-# OVERLAPPING #-}
Monad m => MonadReader r (Mutant LocalId (ReaderT r) m) where
ask = Mutant ask
local _ = id
data LocalRunsTwice
instance {-# OVERLAPPING #-}
Monad m => MonadReader r (Mutant LocalRunsTwice (ReaderT r) m) where
ask = Mutant ask
local f (Mutant m) = Mutant (local f (m >> m))
type MutantReaderT v r = Mutant v (ReaderT r)
type MutantReader v r = MutantReaderT v r Identity