如何写一个踩踏单子?

时间:2017-05-16 10:55:19

标签: functional-programming monads

假设我有一些将永远重复的功能,我知道的最简单的是:

f x = f x

如何编写一个修改此函数行为的monad,以便它给出x的值,以及计算下一步的延续,包括该步骤的x值和延续...

1 个答案:

答案 0 :(得分:1)

您可以将其结构如下所示(使用Haskell进行说明):

data Steps a where
  Done :: a -> Steps a
  ToDo :: b -> (b -> Steps a) -> Steps a

明显的monad实现。

但是,由于bToDo构造函数中存在类型,因此您无法对这些中间结果做很多事情。实际上,我认为这不会给你提供任何更多信息,而不仅仅是

的普通旧偏好monad
data Partial a = Now a | Later (Partial a)