ST monad和严格和排序

时间:2015-09-23 02:44:34

标签: scala monads scalaz

我正在使用Scala和scalaz库编写代码。我编写了一个自定义类型类来对ST monad列表进行排序

implicit def richList[A, S](l: List[ST[S, A]]) =
new {
  def sequence: ST[S, List[A]] = 
    l.foldLeft(ST[S, List[A]](Nil))(
      (listST, elemG) => 
        for (list <- listST;
                elem <- elemG
        ) yield elem :: list).map(_.reverse)
}

ST monad调用ST.map并且ST.flatMap不是堆栈溢出安全的。对于大型列表,对列表进行排序,然后在ST monad结果上调用ST.runST将导致堆栈溢出异常。我试图在互联网上搜索ST monad的热切类似物,但谷歌搜索只显示状态monad的自动填充功能。 IO monad有一个严格的版本,map和flatMap链不会炸掉堆栈。 ST monad有类似的东西吗?

0 个答案:

没有答案