【问题标题】:How to use a Monad Transformer when Disjunction is the outermost container?当 Disjunction 是最外层的容器时,如何使用 Monad Transformer?
【发布时间】:2014-03-14 18:20:31
【问题描述】:
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。如果最外面的类型是析取,我怎样才能让我的 Monad Transformer 工作,而不使用类型别名?

【问题讨论】:

    标签: scala monads monad-transformers scalaz7


    【解决方案1】:
    for{
    i <- ListT[({type l[+a] = String \/ a})#l,Int](vLints)
    _ = println(i)
    } yield i
    

    显然,答案是 lambda 类型。它不漂亮,但很有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-03
      相关资源
      最近更新 更多