我可以像Haskell的7.10一样在7.8中指定重叠/可重叠吗?



是否可以指定哪个实例是重叠的,哪个实例是重叠的ghc 7.8 OverlappingInstances?

我正在尝试在servant/servant-server包中进行一些更新/更改。一切都很好,所有的测试都通过了,除了一个doctest,它在我添加这个更改之前通过了。doctest只在ghc 7.8上失败,在ghc 7.10上通过。我相信这与ghc 7.10我可以指定哪个实例重叠和哪个实例可重叠的事实有关。我如何在ghc 7.8中实现这一点?任何想法/建议都将非常感激。以下是我在ghc 7.8上得到的doctest和失败错误:

-- >>> 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.8中的OverlappingInstances是不可能的。需要重写实例,所以不需要OverlappingInstances pragma

最新更新