2
私はservant-0.4.4.7
を使用しました。以下は私のモデルのコードは次のとおりです。サーバント-0.4.4.7からサーバント-0.7.1への移行
type API = ServletAPI :<|> Raw
type AppM = ReaderT Config (EitherT ServantErr IO)
runApplication :: IO()
runApplication = do
configApp <- initializationConfig
case configApp of
ConfigNull -> return()
otherwise -> run (opt_portServer . cfg_optionsArg $ configApp) $ app configApp
app :: Config -> Application
app configApp = serve api (readerServer configApp)
readerServer :: Config -> Server API
readerServer configApp = enter (readerToEither configApp) server
:<|> serveDirectory (opt_pathFolderStatic . cfg_optionsArg $ configApp)
readerToEither :: Config -> AppM :~> EitherT ServantErr IO
readerToEither configApp = Nat $ \x -> runReaderT x configApp
api :: Proxy API
api = Proxy
このコードは、私がservant-0.7.1
を使用する場合、私はエラーを取得するworked.But:
Couldn't match type ‘Control.Monad.Trans.Except.ExceptT
ServantErr IO’
with ‘EitherT ServantErr IO’
arising from a functional dependency between:
constraint ‘Servant.Utils.Enter.Enter
(ReaderT Config (EitherT ServantErr IO) Data.Text.Internal.Text)
(AppM :~> EitherT ServantErr IO)
(Control.Monad.Trans.Except.ExceptT
ServantErr IO Data.Text.Internal.Text)’
私は型の不一致があることを理解し、それを修正する方法、私は理解できない。
ありがとう!
非常にありがとうございます!私は[link](http://stackoverflow.com/questions/31279943/using-servant-with-readert-io-a)のようにしてみましたが、何かエラーがありました! – QSpider