有了這個代碼如何導入模塊隱藏子模塊或實例?
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