scalaz List [StateT] .sequence: no se pudo encontrar el valor implícito para el parámetro n: scalaz.Applicative

Estoy tratando de descubrir cómo usarStateT para combinar dosStateransformadores de estado @ basados en un comentario en miScalaz ejemplos de mónada del estado responder

Parece que estoy muy cerca, pero tuve un problema al intentar aplicarsequence.

import scalaz._
import Scalaz._
import java.util.Random

val die = state[Random, Int](r => (r, r.nextInt(6) + 1))

val twoDice = for (d1 <- die; d2 <- die) yield (d1, d2)

def freqSum(dice: (Int, Int)) = state[Map[Int,Int], Int]{ freq =>
  val s = dice._1 + dice._2
  val tuple = s -> (freq.getOrElse(s, 0) + 1)
  (freq + tuple, s)
}

type StateMap[x] = State[Map[Int,Int], x]

val diceAndFreqSum = stateT[StateMap, Random, Int]{ random =>
  val (newRandom, dice) = twoDice apply random
  for (sum <- freqSum(dice)) yield (newRandom, sum)
}

Así que llegué a tener unStateT[StateMap, Random, Int] que puedo desenvolver con estados de mapa iniciales aleatorios y vacíos:

val (freq, sum) = diceAndFreqSum ! new Random(1L) apply Map[Int,Int]()
// freq: Map[Int,Int] = Map(9 -> 1)
// sum: Int = 9

Ahora me gustaría generar una lista de esosStateT y usesequence para poder llamar alist.sequence ! new Random(1L) apply Map[Int,Int](). Pero cuando intento esto obtengo:

type StT[x] = StateT[StateMap, Random, x]
val data: List[StT[Int]] = List.fill(10)(diceAndFreqSum)
data.sequence[StT, Int]

//error: could not find implicit value for parameter n: scalaz.Applicative[StT]
          data.sequence[StT, Int]
                       ^

¿Alguna idea? Puedo usar algo de ayuda para el último tramo, suponiendo que sea posible.

Respuestas a la pregunta(1)

Su respuesta a la pregunta