Questions tagged «free-monad»

6
什么是免费的单子?
我见过的长期免费单子弹出每一个 现在 和 随后一段时间,但每个人似乎只是使用/讨论这些问题没有给予它们是什么解释。那么:什么是免费的monad?(我想说我对monad和Haskell基本知识很熟悉,但是对类别理论只有很粗略的了解。)

6
暂停单子
Monad可以完成许多令人惊奇的疯狂事情。他们可以创建保存值叠加的变量。它们可以允许您在计算数据之前访问将来的数据。它们可以允许您编写破坏性的更新,但实际上不是。然后,延续monad可以让您大开眼界!通常是您自己的。;-) 但这是一个挑战:您可以制作一个可以暂停的单子吗? 数据暂停sx 实例Monad(Pause) 变异::(s-> s)->暂停s() 产量::暂停s() 步骤:: s->暂停s()->(s,也许(暂停s())) 该Pause单子是一种状态的单子(因此mutate,具有明显的语义)。通常,这样的monad具有某种“运行”功能,该功能运行计算并让您返回最终状态。但是Pause有所不同:它提供了一个step函数,该函数将运行计算直到调用魔术yield函数。在这里,计算被暂停,将足够的信息返回给调用者,以便以后恢复计算。 要获得更大的声望,请执行以下操作:允许呼叫者修改两次呼叫之间的状态step。(例如,上面的类型签名应允许这样做。) 用例:编写执行复杂功能的代码通常很容易,但是使用一个完整的PITA对其进行转换以在其操作中也输出中间状态。如果您希望用户能够在执行过程中进行某些更改,那么事情就会变得非常复杂。 实施思路: 显然,可以使用线程,锁和来完成IO。但是,我们可以做得更好吗?;-) 延续单子的疯狂吗? 也许是某种作家monad,它只yield记录当前状态,然后我们可以step通过遍历日志中的状态来“假装”它。(显然,这排除了在步骤之间更改状态的可能,因为我们现在并没有真正“暂停”任何内容。)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.