假设我有一些将永远重复的功能,我知道的最简单的是:
f x = f x
如何编写一个修改此函数行为的monad,以便它给出x的值,以及计算下一步的延续,包括该步骤的x值和延续...
答案 0 :(得分:1)
您可以将其结构如下所示(使用Haskell进行说明):
data Steps a where
Done :: a -> Steps a
ToDo :: b -> (b -> Steps a) -> Steps a
明显的monad实现。
但是,由于b
在ToDo
构造函数中存在类型,因此您无法对这些中间结果做很多事情。实际上,我认为这不会给你提供任何更多信息,而不仅仅是
data Partial a = Now a | Later (Partial a)