Я не могу заставить работать следующие экземпляры:
newtype ParseState a = ParseState {
state :: a
} deriving (Show)
newtype Parse m a b = Parse { -- In monad m, parsing from state a to b
runParse :: ParseState a -> m (b,ParseState a)
}
instance Monad m => Monad (Parse m a) where
parser >>= f = Parse $ \s -> do
(result,s') <- runParse parser s
runParse (f result) s'
instance {-# OVERLAPPING #-} (Monad m, Show a) => Monad (Parse m a) where
(>>=) = -- same definition as above
fail err = Parse $ \s ->
fail $ "Parsing error while at" ++ (show s) ++ " : " ++ err
GHC выдает мне сообщение об ошибке "Дублирующиеся объявления экземпляров". Раздел 7.6.3.4 руководства GHC , кажется, допускает такие конструкции, не так ли?
Если нет, как я могу обойти это?