monad-transformers相关内容
假设我想在 async 工作流中返回一个 Option: 让运行 =异步{让!x = doAsyncThing让!y = doNextAsyncThing x匹配 y|无 ->返回无|一些 z ->返回一些
..
每个其他 monad 都带有一个转换器版本,据我所知,转换器的想法是 monad 的通用扩展.按照其他转换器的构建方式,IOT 将类似于 newtype IOT m a = IOT { runIOT :: m (IO a) } 我可以在现场制作有用的应用程序:IOT Maybe 可以做一个 IO 动作或什么都不做,IOT [] 可以建立一个列表,以后可以成为 sequenced. 那么为
..
如我的上一个问题,我正在尝试将 Data.Binary.Put monad 包装到另一个 monad 中,以便稍后我可以问它诸如“它将要写入多少字节"或“文件中的当前位置"之类的问题. 之前,我认为理解为什么在使用简单的(IdentityT?)包装器时会泄漏内存将引导我解决我的问题.但是即使你们帮我解决了这个简单的包装器的问题,用像 StateT 或 WriterT 这样有用的东西来包装它仍然消
..
来自 这个 主题(Control.Monad.Cont fun, 2005),TomaszZielonka 引入了一个函数(Thomas Jäger 以清晰和友好的方式进行了评论).Tomasz 接受 callCC 主体的参数(一个函数)并返回它以供以后使用,并带有以下两个定义: import Control.Monad.Cont...getCC :: MonadCont m =>米(米一)ge
..
到目前为止,我遇到的每个 monad(可以表示为数据类型)都有一个相应的 monad 转换器,或者可以有一个.有没有这样的 monad 不能有一个?或者是否所有的 monad 都有相应的转换器? 通过一个 transformer t 对应于 monad m 我的意思是 t Identity 与 同构米.当然,它满足 monad 转换器定律,并且 t n 是任何 monad n 的 monad
..
有人可以给出一个非常简单的(几行)monad 转换器示例,这很重要(即不使用 Identity monad - 我理解). 例如,有人将如何创建一个执行 IO 并可以处理失败的 monad(也许)? 可以证明这一点的最简单的例子是什么? 我浏览了一些 monad 转换器教程,它们似乎都使用了 State Monad 或 Parsers 或一些复杂的东西(对于新手来说).我想看到比
..
应用程序组成,monads 没有. 上面的说法是什么意思?什么时候一个比另一个更可取? 解决方案 如果我们比较类型 () :: Applicative a =>a(s->t)->一个->在(>>=) :: Monad m =>ms ->(s -> m t) ->吨 我们得到了区分这两个概念的线索.(>>=) 类型中的 (s -> mt) 表明 s 中的值可以决定行为mt 中的计算
..
目前,我尝试编写一个小游戏程序(Skat)作为业余项目.Skat 是一种花招游戏,由两名玩家对战一名玩家.由于有不同类型的播放器(本地播放器、网络播放器、计算机等),我想将播放器的界面抽象化. 我的基本想法是使用类型类 Player,它定义了所有类型的事情,玩家必须做和知道的事情(打牌,通知谁赢了,等等).然后,整个游戏只是通过一个函数playSkat :: (Player a, Playe
..
我有一个列表 monad List[Int].我想根据列表的值生成效果(分离和状态).这是我的 monad 堆栈和运行 monad 堆栈的代码.我的问题是定义 checkNum 的正确方法应该是什么,以便我可以生成正确的效果? 我的预期输出应该 List(("", \/-(1), ("Error: 2", -\/(Throwable())), ("",\/-(3)), ("Error: 4
..
因为我想结合适用于长方法 Future 的 Kleisli 可能会失败 Either,所以我需要叠加效果.这是在 Kleisli 中堆叠效果的结果代码.scalaz 中是否有现有的组合器? type FutureEitherT[A] = EachT[Future, String, A]def toKleisliEitherTFromDisjunction[A](f: Kleisli[Future
..
我有一个方法的结果:val res: Future[Int] Xor Future[String] = getResult(x) 并想对其进行转换并将其用作Future[Int Xor String] 我无法从 牧猫博客 并且不确定 monad 转换器是否是这里的正确工具,也许是某种形式的 traverse? 来自cats 的 Xor 代表任何分离.Scalaz \/ 或 stdl
..
我正在尝试开始在我的项目中使用免费的 monad,并且我正在努力使其优雅. 假设我有两个上下文(实际上我有更多) - Receipt 和 User - 两者都对数据库进行操作,我想将它们的解释器分开并组合它们在最后一刻. 为此,我需要为每个操作定义不同的操作,并使用 Coproduct 将它们组合成一种类型. 这是我经过几天的谷歌搜索和阅读后的结果: //收据密封性状 ReceiptOp[
..
这是我上一个问题的后续:测序Scalaz WriterT 和Either with for-yield 以下代码块是使用 EitherT 和 EitherT 对 Future、Either 和 Writer 进行排序的示例code>WriterT monad 转换器;下面的问题是关于如何巧妙地改变那堆转换器的行为. import scalaz._, Scalaz._class Exampl
..
我正在尝试根据对我的 Scalaz 状态 monad 示例 答案. 看起来我已经很接近了,但是在尝试应用 sequence 时遇到了问题. 导入scalaz._导入 Scalaz._导入 java.util.Randomval die = state[Random, Int](r => (r, r.nextInt(6) + 1))val twoDice = for (d1 val s =
..
我如何对 Future[\/[String,Int]] 类型的数据进行 for 理解 这是一个不编译的起点. import scala.concurrent.{ExecutionContext,future,Future}进口scalaz._导入 Scalaz._导入 ExecutionContext.Implicits.globaldef calculateStuff(i:Int):Fut
..
已经讨论过 mapM 本质上不是惰性的,例如此处和 一种解决方案是使用流媒体库,例如 pipes , conduit 等.但是这些看起来很繁重,我也不知道如何使用它们.在这种情况下. 我研究过的另一条路径是 ListT ,如此处.但是 ListT.fromFoldable :: [Bool]-> ListT Bool 和 ListT.fold ::(r-> a-> m r)->的类型签
..
作为程序的一部分,我需要记录单子计算的数据,我试图定义一个类以使其更加方便. 模块序列号,其中导入Data.Int导入Data.IORef导入System.IO导入Control.Monad.Trans导入Foreign.Ptr进口外国元帅导入Foreign.Storableclass MonadIO m =>序列号得到::句柄->嘛放::句柄->a->米() 我想做的一件事是在“较高"的m
..
如何使用 Reader / ReaderT 来询问以获取列表类型,例如 [((Int,Int)] ,然后在列表monad(类型为 ask 的类型)中执行计算? 下面是我破损的代码,为清楚起见已将其简化: 尝试:: Int->整数->ReaderT [(Int,Int)] [] [[Int]]尝试开始结束=做(s0,e0)
..
我的目标是创建一个使用ReaderT WriterT堆栈或RWS堆栈内的列表monad的函数.更一般而言,如何在mtl类型类(例如MonadReader,MonadWriter)中使用列表monad? 我为什么要这样做?此问题是开始Haskell 中的一种练习.它要求我“使用包装基本列表monad的MonadReader和MonadWriter的功能.要检查该功能是否通用,请使用两个不同的m
..
我知道如何实现单链表monad转换器,但无法运行其数组副本.问题在于存在分组效应,该效应使变压器仅对可交换基本单声道有效.这是一个示例,为简单起见,转换器和基本monad均为数组,并且没有转换器类型包装器: //数组const arrMap = f =>xs =>xs.map((x,i)=> f(x,i));const arrAp = tf =>xs =>arrFold(acc => f =
..