Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我是否可以像Haskell中的7.10那样在7.8中指定重叠/可重叠?_Haskell_Ghc_Overlapping Instances - Fatal编程技术网

我是否可以像Haskell中的7.10那样在7.8中指定重叠/可重叠?

我是否可以像Haskell中的7.10那样在7.8中指定重叠/可重叠?,haskell,ghc,overlapping-instances,Haskell,Ghc,Overlapping Instances,是否可以指定哪个实例与ghc 7.8 OverlappingInstances重叠,哪个实例可与ghc 7.8 OverlappingInstances重叠 我正在尝试对服务/服务服务器包进行一些更新/更改。所有的编译都很好,所有的测试都通过了,除了一个doctest,它在我添加这个更改之前通过了。doctest仅在ghc 7.8上失败,并在ghc 7.10上通过。我相信这与ghc 7.10我可以指定哪个实例是重叠的,哪个实例是可重叠的这一事实有关。在ghc 7.8中如何实现这一点?如有任何想法

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

我正在尝试对服务/服务服务器包进行一些更新/更改。所有的编译都很好,所有的测试都通过了,除了一个doctest,它在我添加这个更改之前通过了。doctest仅在ghc 7.8上失败,并在ghc 7.10上通过。我相信这与ghc 7.10我可以指定哪个实例是重叠的,哪个实例是可重叠的这一事实有关。在ghc 7.8中如何实现这一点?如有任何想法/建议,将不胜感激。以下是我在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
-->import Control.Monad.Reader
-->>>导入合格控制。类别为C
-->>>键入ReaderAPI=“ep1”:>获取“[JSON]Int:“ep2”:>获取“[JSON]String
-->>>让readerServer=返回1797:ask::ServerT ReaderAPI(读取器字符串)
-->>>让mainServer=enter(generalizenatc..(runReaderTNat“hi”))readerServer::Server ReaderAPI
--
--$setup
-->>>导入Servant.API
-->>>导入服务服务器
--错误
###src/Servant/Server.hs:129:expression`let mainServer=enter(generalizeNat C..(runReaderTNat“hi”))readerServer::Server ReaderAPI'
预期:
但是得到:
:44:18:
无法匹配类型“Control.Monad.Trans.other.EitherT”
ServantErr IO[Char]'
使用“ReaderT String Data.Functor.Identity.Identity[Char]”
在表达式中:
输入(generalizeNat C..(runReaderTNat“hi”))readerServer::
服务器读卡器API
在“mainServer”的方程式中:
主服务器
=输入(generalizeNat C..(runReaderTNat“hi”))readerServer::
服务器读卡器API

对于7.8中的重叠实例,这是不可能的。需要重写实例,这样就不需要OverlappingInstances pragma。

重叠/可重叠的内容仅为7.10。我不知道是什么导致了您的问题,但您可以通过不使用重叠实例来解决它。而且,
MIN\u VERSION\u base
并不是检查GHC功能的明智方法。改用
\uuu格拉斯哥\uu哈斯克尔=710
。检查基本库版本只是为了检查基本库是否是您所需要的。@d您的意思是不通过重写实例来使用重叠实例,这样我就不需要重叠吗?我还不认为它们实际上是个好主意。它们可以制作出漂亮的API,但它们在奇怪的方面受到限制。