Можно ли указать, какой экземпляр перекрывается и какой экземпляр перекрывается с помощью ghc 7.8 OverlappingInstances?Могу ли я указать перекрытие/перекрытие в 7.8, например 7.10 в Haskell?
Я пытаюсь сделать некоторые обновления/изменения в пакетах servant/servant-server. Все компилируется отлично, и все тестовые проходы, за исключением одного допроса, который проходил до того, как я добавил это изменение Enter instance for Raw. Доктрист только терпит неудачу на ghc 7.8 и переходит на ghc 7.10. Я считаю, что это связано с тем, что ghc 7.10 я могу указать, какой экземпляр перекрывается и какой экземпляр является перекрывающимся. Как я могу выполнить это ghc 7.8? Любые идеи/указатели будут высоко оценены. Вот doctest и отсутствии ошибок я получаю на GHC 7.8:
-- >>> import Control.Monad.Reader
-- >>> import qualified Control.Category as C
-- >>> type ReaderAPI = "ep1" :> Get '[JSON] Int :<|> "ep2" :> Get '[JSON] String
-- >>> let readerServer = return 1797 :<|> ask :: ServerT ReaderAPI (Reader String)
-- >>> let mainServer = enter (generalizeNat C.. (runReaderTNat "hi")) readerServer :: Server ReaderAPI
--
-- $setup
-- >>> import Servant.API
-- >>> import Servant.Server
-- Error
### Failure in src/Servant/Server.hs:129: expression `let mainServer = enter (generalizeNat C.. (runReaderTNat "hi")) readerServer :: Server ReaderAPI'
expected:
but got:
<interactive>:44:18:
Couldn't match type ‘Control.Monad.Trans.Either.EitherT
ServantErr IO [Char]’
with ‘ReaderT String Data.Functor.Identity.Identity [Char]’
In the expression:
enter (generalizeNat C.. (runReaderTNat "hi")) readerServer ::
Server ReaderAPI
In an equation for ‘mainServer’:
mainServer
= enter (generalizeNat C.. (runReaderTNat "hi")) readerServer ::
Server ReaderAPI
Перекрывающаяся/перекрывающаяся вещь 7.10. Я не знаю, что вызывает вашу проблему, но вы можете решить ее, не используя перекрывающиеся экземпляры. – dfeuer
Кроме того, 'MIN_VERSION_base' на самом деле не является разумным способом проверки возможностей GHC. Вместо этого используйте '__GLASGOW_HASKELL__> = 710'. Проверьте версию базовой библиотеки только, чтобы проверить, нужна ли базовая библиотека. – dfeuer
@dfeuer вы имеете в виду не использовать перекрывающиеся экземпляры, переписывая экземпляры, поэтому мне не нужно перекрываться? – codedmart