val vLInts = (1 to 10).toList.right[String]
for {
i <- ListT(vLints)
_ = println(i)
} yield i
//error: no type parameters for method apply:(underlying: M[List[A]])scalaz.ListT[M,A] in object ListT exist so that it can be applied to arguments (scalaz.\/[String,List[Int]])
这里的问题是析取\/[A, B]
有2个泛型,因此不是Monad。当我做一个类型别名
type Attempt[A] = \/[String, A]
它成功了,因为我已经固定左侧,我现在有Monad。如果最外面的类型是Disjunction,如何在不使用类型别名的情况下让我的Monad Transformer工作?
答案 0 :(得分:2)
for{
i <- ListT[({type l[+a] = String \/ a})#l,Int](vLints)
_ = println(i)
} yield i
显然,答案是一种类型的lambda。它不漂亮,但它有效。