data MyAppR = MyAppR {
dbPool :: Pool Connection
}
type NewApp = ReaderT (MyAppR) IO
type AppActionNew a = ActionT L.Text NewApp a
type AppServerNew a = ScottyT L.Text NewApp a
type App = IO
type AppServer a = ScottyT L.Text App a
type AppAction a = ActionT L.Text App a
type AppActionT = ActionT L.Text App
如何定义一个函数,例如:
mylift :: AppServer () -> AppServerNew ()
mylift a = undefined
发布它以防万一有人已经有了解决方案,否则我只会弄清楚这一点。不幸的是ScottyT
/ActionT
不是一个单子变压器,所以我不能只做通常的提升。
这样做的全部原因是,我现在需要一个用于我的应用程序的数据库池,但我不想费心在任何地方更改AppServer
类型,然后在所有地方提升。可能只是结合和混合AppServer
更快AppServerNew
。
类型检查的初始解决方案 - 但似乎无法正常工作,因为所有“处理程序”都以 404 响应:
mylift :: AppServer () -> AppServerNew ()
mylift (ScottyT x) = pure $ evalState x def