【发布时间】:2017-01-22 23:56:36
【问题描述】:
到目前为止,我想出了以下几点:
{-# LANGUAGE RankNTypes #-}
import Data.RVar -- from rvar
import Control.Monad.Trans.Class (lift) -- from transformers
hoistRVarT :: Monad m => (forall t. n t -> m t) -> RVarT n a -> RVarT m a
hoistRVarT f rv = sampleRVarTWith (lift . f) rv
但是,这不能用作MFunctor 的hoist 的定义,因为lift 对m 产生了Monad 约束。问题是,如果没有lift,我找不到另一种方法将生成的单子提升到RVarT。但我认为从概念上讲它应该是可能的,因为RVarT 应该类似于StateT,并且StateT 有一个MFunctor 实例。问题是我在 rvar 或 random-fu 的 API 中找不到任何暴露此类功能的内容。
【问题讨论】:
标签: haskell monads monad-transformers