5
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 つのジェネリックがあるため、モナドではないことです。タイプエイリアスを作成するとき

type Attempt[A] = \/[String, A]

左辺を固定してモナドを持っているので、それは成功します。最も外側の型が Disjunction の場合、型のエイリアシングに頼らずに Monad Transformer を機能させるにはどうすればよいですか?

4

1 に答える 1

2
for{
i <- ListT[({type l[+a] = String \/ a})#l,Int](vLints)
_ = println(i)
} yield i

どうやら、答えはラムダ型でした。きれいではありませんが、機能します。

于 2014-03-17T16:06:03.543 に答える