With this code
import Control.Monad
import Control.Applicative
import Control.Monad.State
class DefVal a where
defVal :: a
instance (DefVal a) => Alternative (Either a) where
empty = Left defVal
(Left _) <|> x = x
x <|> _ = x
instance (DefVal a) => MonadPlus (Either a) where
mzero = empty
mplus = (<|>)
newtype ErrString = ErrString { toString :: String }
deriving Show
instance DefVal ErrString where
defVal = ErrString "Default Error String"
I'm getting errors:
Duplicate instance declarations:
instance DefVal a => Alternative (Either a)
-- Defined at main.hs:10:10
instance Control.Monad.Trans.Error.Error e =>
Alternative (Either e)
-- Defined in ‘Control.Monad.Trans.Error’
Duplicate instance declarations:
instance DefVal a => MonadPlus (Either a)
-- Defined at main.hs:15:10
instance Control.Monad.Trans.Error.Error e => MonadPlus (Either e)
-- Defined in ‘Control.Monad.Trans.Error’
Error disappears if I remove Control.Monad.State
which imports Control.Monad.Trans.Error
.
How can I import Control.Monad.State
hiding Control.Monad.Trans.Error
or hiding Either
instances of Alternative
and MonadPlus
from there?
I use GHC-7.10.2