Tag: monad transformers

转到Haskell:任何人都可以解释这个继续monad使用这个看似疯狂的效果吗?

从这个线程(Control.Monad.Cont fun,2005),Tomasz Zielonka介绍了一个函数(托马斯·耶格(ThomasJäger)以一种清晰而美好的方式进行了评论)。 Tomasz接受一个callCC主体的参数(一个函数),并将其返回给以后使用的两个定义: import Control.Monad.Cont … getCC :: MonadCont m => m (ma) getCC = callCC (\c -> let x = cx in return x) getCC' :: MonadCont m => a -> m (a, a -> mb) getCC' x0 = callCC (\c -> let fx = c (x, f) in return (x0, f)) Haskellwiki也提到了这些 […]

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

每一个monad都有一个变压器版本,从我所知道的变压器的想法是单子的通用扩展。 跟随其他变压器的build立, IOT将是类似的东西 newtype IOT ma = IOT { runIOT :: m (IO a) } 为此,我可以在现场IOT Maybe有用的应用程序: IOT Maybe可以执行一个IO操作,也可以不执行任何操作, IOT []可以创build一个列表,稍后可以将其作为sequence d。 那么为什么Haskell中没有IO变压器呢? (注意:我在Haskell Cafe看过这篇文章 ,但是没有太多意义, ST转换器的Hackage页面在其描述中提到了一个可能相关的问题,但是没有提供任何细节。

用Monad变形金刚避免电梯

我有一个问题,非常适合使用堆栈的MT(甚至一个MT)通过IO。 一切都很好,只是在每个动作之前使用电梯是非常烦人的! 我怀疑这件事真的没有什么可做,但我想我会问。 我知道提升整个块,但如果代码真的是混合types呢? 如果GHC放入一些句法糖(例如<-$ = <- lift ),会不会很好?

有没有人在野外遇到过Monad Transformer?

在我的业务领域 – 一家金融机构的后台IT部门 – 软件组件周围进行全局configuration,logging进度,出现某种error handling/计算短路是非常常见的事情。可以很好地用Haskell中的Reader,Writer,Maybe-monads等来模拟,并与monad变换器组合在一起。 但似乎有一些缺点:monad变换器背后的概念是相当棘手和难以理解的,monad变换器导致非常复杂的types签名,并造成一些性能损失。 所以我想知道:在处理上面提到的这些常见任务时,单变换器是否是最佳实践?

有没有一个monad没有相应的monad变压器(IO除外)?

到目前为止,我所遇到的每个monad(可以表示为一个数据types)都有一个对应的monad变换器,或者可以有一个。 有没有这样的monad? 还是所有的monad都有相应的变压器? 通过对应于monad m的变换器t ,我的意思是t Identity同构同构于m 。 当然,它符合monad变压器法则,而且对于任何monad n来说都是monad。 我希望看到一个certificate(理想上是有build设性的),即每一个单子都有一个certificate,或者是一个没有certificate的单子的certificate。 我对哈斯克尔导向的答案以及(类别)理论答案都感兴趣。 作为一个后续的问题,是否有一个monad m有两个不同的变换器t1和t2 ? 也就是说, t1 Identity同构于t2 Identity和m ,但是有一个monad n使得t1 n不同构于t2 n 。 ( IO和ST有一个特殊的语义,所以我不考虑它们,让我们完全忽略它们,让我们只关注可以使用数据types构造的“纯”单子。

mtl,变形金刚,monads-fd,monadLib以及select的悖论

Hackage有几个monad变压器的软件包: mtl :Monad变压器库 变形金刚 :具体仿函数和单子变压器 monads-fd :Monad类,使用函数依赖关系 monad-tf :Monad类,使用types族 monadLib :monad变换器的集合。 mtl-tf :使用types族的Monad变换器库。 mmtl :模块化Monad变压器库 mtlx :带有types索引的Monad变换器库,提供“免费”拷贝。 compose-trans :可组合的monad变压器 (也许我错过了一些) 我们应该使用哪一个? mtl是Haskell平台中的一个,但是我一直听到reddit的说法,它并不冷静。 但无论如何,select有什么不好,这不是一件好事吗? 那么,我看到了例如数据访问者的作者必须使所有这些才能迎合stream行的select: data-accessor-monadLib库:monadLib monad的访问器函数 data-accessor-monads-fd库:使用Accessor访问monads-fd状态monad类中的状态 data-accessor-monads-tf库:使用Accessor访问monads-tf状态monadtypes系列中的状态 data-accessor-mtl库:使用Accessor访问mtl状态monad类中的状态 数据访问器或变换器库:使用访问器访问变换器状态单元中的状态 我想如果这样做,例如几个竞争的箭头包发展,我们可能会看到类似:勺子链接箭头变形金刚,勺子箭头monadLib,spoonklink-tf箭头变换器,spoonklink-tf箭头monadLib,… 然后我担心,如果spoonklink分叉,Hackage将用完磁盘空间。 🙂 问题: 为什么有这么多的monad变压器封装? 为什么mtl [考虑]不酷? 关键的区别是什么? 这些看似相互竞争的软件包大部分都是由Andy Gill编写的,由Ross Paterson维护。 这是否意味着这些软件包不是竞争,而是以某种方式一起工作? 安迪和罗斯是否认为他们自己的软件包已经过时了? 你应该使用哪一个?

申请人撰写,monads不

申请人撰写,monads不。 上述说法是什么意思? 何时比其他人更喜欢?