有了这个代码如何导入模块隐藏子模块或实例?
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
或隐藏的Alternative
Either
实例,并从那里MonadPlus
?
我用GHC-7.10.2
AFAIK目前绝对没有办法引用导入/导出列表中的实例。你运气不好。请参阅:http://stackoverflow.com/questions/8728596/explicitly-import-instances – Bakuriu