请问有人可以给一个如何使用ScalaZ Free monad的例子吗?
比如说,如果我有一个简单的State函数,并且想要应用它10,000次,那么就会得到StackOverflowError:
def setS(i: Int) :State[List[Int], Unit] = State { l => ( i::l, () ) }
val state = (1 to 10000).foldLeft( put(Nil :List[Int]) ) {
case (st, i) => st.flatMap(_ => setS(i))
}
state(Nil)
据我理解,自由单子可以帮助避免这种情况。如何使用自由单子重写此代码段以避免堆栈溢出?