我有一个形式的单子变压器堆栈:
newtype T m a = T { unT :: StateT State (SqlPersist m) a }
deriving (Monad, MonadState State)
并且想使用持久化insert
和lookup
调用,所以我需要PersistBackend
为T
. 然而,幻象类型将特定的后端编码为Key
返回类型——这会引起一些额外的麻烦。为了解决幻像类型问题,我的实例具有以下形式:
instance (Monad m, MonadIO m, MonadBaseControl IO m) => PersistBackend T m where
insert = T . lift . liftM (Key . unKey) . insert
... and about a dozen such methods ...
我是否盲目地忽略了一种更简单的方法?手动提升调用函数以外的一种方式:insertT = T . lift . insert