私はサーバント0.5でのREST APIの単純な例構築したい:私はそれが原因で別の場所で「期待されるタイプと一致しませんでした」たくさんのエラーのコンパイルすることはできませんサーバントの休憩APIの簡単な例、または「モナドを正しく混合する方法」?
data MyData = MyData { var1 :: Int, var2 :: String }
app :: Application
app = serve api server
api :: Proxy API
api = Proxy
server :: Server API
server = getItems
getItems :: EitherT ServantErr IO [MyData]
getItems = runEitherT $ do
aa <- nextRandom -- IO
bb <- getCurrentTime -- IO
cc <- getDataFromDb -- IO
--noteT ??? How???
--MaybeT ??? How???
return $ Just [MyData 111 222]
startApp :: IO()
startApp = run 8080 app
を。私は "getItems"に2つの異なるモナドを混ぜているからだと思います。しかし、それだけではありません。ここで
これはおそらく[this](http://haskell-servant.github.io/posts/2016-03-19-servant-0.5-release.html#switch-from-eithert-to-exceptt) 。 –
エラーを再現するのに十分なコードがここにありません( 'API'型が完全に欠落しています)。 'getItems'が何をすべきかを実際に伝えるのに十分な情報はありません。しかし、一見すると 'runEitherT'は必要なく、' EitherT ... '型の値を生成しているので、実行する必要はありません。 'IO x '型の値は' liftIO'でラップする必要があります: 'aa < - liftIO nextRandom'です。 – user2407038