С помощью этого кодаКак импортировать модуль, скрывающий подмодули или экземпляры?
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"
я получаю ошибки:
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’
Ошибка исчезает, если удалить Control.Monad.State
, который импортирует Control.Monad.Trans.Error
.
Как я могу импортировать Control.Monad.State
Control.Monad.Trans.Error
скрывается или скрыть Either
экземпляры Alternative
и MonadPlus
оттуда?
Я использую GHC-7.10.2
AFAIK в настоящее время абсолютно невозможно ссылаться на экземпляры в списках импорта/экспорта. Не повезло тебе. См. Http://stackoverflow.com/questions/8728596/explicitly-import-instances – Bakuriu