40得票5回答
使用State monad来绑定状态

我正在处理一个Haskell项目,其中涉及打结:我正在解析图的序列化表示形式,其中每个节点都在文件的某些偏移量处,并且可能通过其偏移量引用另一个节点。因此,在解析时需要建立一个从偏移量到节点的映射表,我可以在do rec块中反馈给自己。 我已经让它工作了,并且有点抽象成了类似于StateT的...

21得票3回答
是否有可能为“Free”实现MonadFix?

http://hackage.haskell.org/package/free 中的 Control.Monad.Free.Free 可以让你获得任何给定 Functor 的 "自由单子",但它没有一个 MonadFix 实例。这是因为无法编写此类实例,还是被遗漏了? 若无法编写此类实例,是...

21得票2回答
为什么延续 Monad 不能有 MonadFix 实例?

我们如何证明延续单子没有有效的MonadFix实例?

19得票2回答
使用Cont从未来和过去中获取值

我正在用Haskell编写一个Brainfuck解释器,我想到了一种我认为非常有趣的程序描述:data Program m = Instruction (m ()) (Program m) | Control (m (Program m)) ...

16得票1回答
Data.Map实现中的Bug?

我碰到了一件事情,我猜想是在Data.Map中的一个bug,但也很有可能是我Haskell知识方面的问题。希望有人能澄清这是哪个问题 :) 请参考此处的代码片段。我正在将一个循环链表结构序列化为字节流。对于任何给定的节点,形式为:data Node = Node { val :: Wo...

14得票2回答
是否存在 Monad 的实例但不存在 MonadFix 的实例?

问题主要在标题中。似乎mfix可以为任何单子计算定义,即使它可能发散:mfix :: (a -> m a) -> m a mfix f = fix (join . liftM f) 这个结构有什么问题?此外,为什么Monad和MonadFix类型类是分开的(即哪种类型具有Monad...

13得票1回答
一个单子玫瑰树可以有MonadFix实例吗?

考虑到newtype Tree m a = Tree { runTree :: m (Node m a) } data Node m a = Node { nodeValue :: a , nodeChildren :: [Tree m a] } 是否存在有效的MonadFix实...

12得票1回答
一个懒惰、广度优先的单子化玫瑰树展开是可行的吗?

Data.Tree 包含 unfoldTreeM_BF 和 unfoldForestM_BF 函数,可使用单子动作的结果以广度优先方式构建树。树展开器可以轻松地使用森林展开器编写,因此我将专注于后者:unfoldForestM_BF :: Monad m => ...

11得票1回答
如何恢复足够的懒惰来在一个单子中打结的任何方法?(注:此问题涉及IT技术中的函数式编程概念,需要一定专业背景知识才能理解)

我想要写一段简洁的代码(否则需要花费很多时间实现),通过tying the knot来完成。大致上就是这样:n <- myinstr n x 理论上,myinstr应该运行x并得到一个值,这个值会变成n。 myinstr在State单子中运行,将把n放入状态中,但这不会影响x的计算。 ...

10得票1回答
在严格语言中的MonadFix

我正在为Ocaml编写类似于Haskell do 符号的 camlp4 扩展,并且试图弄清楚 GHC 如何编译递归的 do-bindings(启用 -XDoRec)。 我想知道在严格语言(如 Ocaml/F#/SML/...)中是否可能存在单子不动点组合器? 如果是,它会是什么样子?它会非常有用吗?