Проблема получения языковой прагмы ПЕРЕКРЫТИЯ на работу - PullRequest
0 голосов
/ 08 апреля 2019

Я не могу заставить работать следующие экземпляры:

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 , кажется, допускает такие конструкции, не так ли?

Если нет, как я могу обойти это?

...