monad-transformers相关内容

为什么 Haskell 中没有 IO 转换器?

每个其他 monad 都带有一个转换器版本,据我所知,转换器的想法是 monad 的通用扩展.按照其他转换器的构建方式,IOT 将类似于 newtype IOT m a = IOT { runIOT :: m (IO a) } 我可以在现场制作有用的应用程序:IOT Maybe 可以做一个 IO 动作或什么都不做,IOT [] 可以建立一个列表,以后可以成为 sequenced. 那么为 ..
发布时间:2022-01-04 08:17:02 其他开发

为什么包装 Data.Binary.Put monad 会造成内存泄漏?(第2部分)

如我的上一个问题,我正在尝试将 Data.Binary.Put monad 包装到另一个 monad 中,以便稍后我可以问它诸如“它将要写入多少字节"或“文件中的当前位置"之类的问题. 之前,我认为理解为什么在使用简单的(IdentityT?)包装器时会泄漏内存将引导我解决我的问题.但是即使你们帮我解决了这个简单的包装器的问题,用像 StateT 或 WriterT 这样有用的东西来包装它仍然消 ..
发布时间:2021-12-31 08:20:27 其他开发

Goto in Haskell:谁能解释一下延续 monad 用法的这种看似疯狂的效果?

来自 这个 主题(Control.Monad.Cont fun, 2005),TomaszZielonka 引入了一个函数(Thomas Jäger 以清晰和友好的方式进行了评论).Tomasz 接受 callCC 主体的参数(一个函数)并返回它以供以后使用,并带有以下两个定义: import Control.Monad.Cont...getCC :: MonadCont m =>米(米一)ge ..
发布时间:2021-12-14 12:28:02 其他开发

是否有没有相应的 monad 转换器的 monad(IO 除外)?

到目前为止,我遇到的每个 monad(可以表示为数据类型)都有一个相应的 monad 转换器,或者可以有一个.有没有这样的 monad 不能有一个?或者是否所有的 monad 都有相应的转换器? 通过一个 transformer t 对应于 monad m 我的意思是 t Identity 与 同构米.当然,它满足 monad 转换器定律,并且 t n 是任何 monad n 的 monad ..
发布时间:2021-12-14 12:02:04 其他开发

“傻瓜"的最简单的非平凡单子转换器示例,IO+Maybe

有人可以给出一个非常简单的(几行)monad 转换器示例,这很重要(即不使用 Identity monad - 我理解). 例如,有人将如何创建一个执行 IO 并可以处理失败的 monad(也许)? 可以证明这一点的最简单的例子是什么? 我浏览了一些 monad 转换器教程,它们似乎都使用了 State Monad 或 Parsers 或一些复杂的东西(对于新手来说).我想看到比 ..
发布时间:2021-12-14 12:01:01 其他开发

应用程序组成,单子不

应用程序组成,monads 没有. 上面的说法是什么意思?什么时候一个比另一个更可取? 解决方案 如果我们比较类型 () :: Applicative a =>a(s->t)->一个->在(>>=) :: Monad m =>ms ->(s -> m t) ->吨 我们得到了区分这两个概念的线索.(>>=) 类型中的 (s -> mt) 表明 s 中的值可以决定行为mt 中的计算 ..

接口抽象设计

目前,我尝试编写一个小游戏程序(Skat)作为业余项目.Skat 是一种花招游戏,由两名玩家对战一名玩家.由于有不同类型的播放器(本地播放器、网络播放器、计算机等),我想将播放器的界面抽象化. 我的基本想法是使用类型类 Player,它定义了所有类型的事情,玩家必须做和知道的事情(打牌,通知谁赢了,等等).然后,整个游戏只是通过一个函数playSkat :: (Player a, Playe ..
发布时间:2021-11-26 17:30:13 其他开发

带有 Coproduct 和 monad 转换器的 Scala Free Monads

我正在尝试开始在我的项目中使用免费的 monad,并且我正在努力使其优雅. 假设我有两个上下文(实际上我有更多) - Receipt 和 User - 两者都对数据库进行操作,我想将它们的解释器分开并组合它们在最后一刻. 为此,我需要为每个操作定义不同的操作,并使用 Coproduct 将它们组合成一种类型. 这是我经过几天的谷歌搜索和阅读后的结果: //收据密封性状 ReceiptOp[ ..
发布时间:2021-07-15 20:36:04 其他开发

Haskell:替换monad变压器堆栈中的mapM以实现惰性评估(无空间泄漏)

已经讨论过 mapM 本质上不是惰性的,例如此处和 一种解决方案是使用流媒体库,例如 pipes , conduit 等.但是这些看起来很繁重,我也不知道如何使用它们.在这种情况下. 我研究过的另一条路径是 ListT ,如此处.但是 ListT.fromFoldable :: [Bool]-> ListT Bool 和 ListT.fold ::(r-> a-> m r)->的类型签 ..
发布时间:2021-05-13 20:45:41 其他开发

将类型为`MonadIO`的类的实例提升为转换后的monad

作为程序的一部分,我需要记录单子计算的数据,我试图定义一个类以使其更加方便. 模块序列号,其中导入Data.Int导入Data.IORef导入System.IO导入Control.Monad.Trans导入Foreign.Ptr进口外国元帅导入Foreign.Storableclass MonadIO m =>序列号得到::句柄->嘛放::句柄->a->米() 我想做的一件事是在“较高"的m ..
发布时间:2021-05-13 20:44:38 其他开发

如何在ReaderT内部使用列表单子?

如何使用 Reader / ReaderT 来询问以获取列表类型,例如 [((Int,Int)] ,然后在列表monad(类型为 ask 的类型)中执行计算? 下面是我破损的代码,为清楚起见已将其简化: 尝试:: Int->整数->ReaderT [(Int,Int)] [] [[Int]]尝试开始结束=做(s0,e0) ..
发布时间:2021-05-13 20:41:10 其他开发

在monad变压器类型类中使用列表monad?

我的目标是创建一个使用ReaderT WriterT堆栈或RWS堆栈内的列表monad的函数.更一般而言,如何在mtl类型类(例如MonadReader,MonadWriter)中使用列表monad? 我为什么要这样做?此问题是开始Haskell 中的一种练习.它要求我“使用包装基本列表monad的MonadReader和MonadWriter的功能.要检查该功能是否通用,请使用两个不同的m ..
发布时间:2021-05-13 20:38:04 其他开发

有有效的阵列monad变压器吗?

我知道如何实现单链表monad转换器,但无法运行其数组副本.问题在于存在分组效应,该效应使变压器仅对可交换基本单声道有效.这是一个示例,为简单起见,转换器和基本monad均为数组,并且没有转换器类型包装器: //数组const arrMap = f =>xs =>xs.map((x,i)=> f(x,i));const arrAp = tf =>xs =>arrFold(acc => f = ..