在使用 HDBC Snaplet 的教程中,它说“设计 HDBC snaplet 时的目标之一是将函数与 Handler monad 或任何与 Snap 相关的 monad 分离,以便相同的查询也可以在外部运行Snap 上下文,例如在命令行工具中。”
我正在努力做到这一点。
类型类 HasHdbc 有定义
class ( IConnection c
, ConnSrc s
, MonadCatchIO m
)
=> HasHdbc m c s | m -> c s where
getHdbcState :: m (HdbcSnaplet c s)
可以这样定义这种类型的 Snap 应用程序的实例:
instance HasHdbc (Handler App App) Connection IO where
getHdbcState = with dbLens get
有人可以勾勒出如何使用 HasHdbc 类型类在 Snap 上下文之外制作这个命令行工具吗?我在基本层面上了解类型类,但类型签名getHdbcState :: m (HdbcSnaplet c s)
对我来说是一个挑战,例如为 IO Monad 定义一个实例。