haskell - 使用 Scotty,我如何将 ScottyM 与自定义 monad 与 ScottyT 结合起来
问题描述
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
解决方案
推荐阅读
- java - 如何将 DirectToolItem 与 e4 中的部件连接起来
- tsql - 如何在计算中处理 1 或 2 NULL
- sql - SQL Server .bak 文件 - 导入 MySQL
- android - 检查应用更新并下载然后安装
- node.js - 使用日期类型的猫鼬查询
- javascript - 导航回平面列表重置时做出本机反应
- codeigniter - codeigniter:试图获取非对象的属性
- java - Android RecyclerView 和 onBindViewHolder
- javascript - topfunction 未定义
- python - 到列表中最近的非零值的距离?