我通过转换现有类来使用Monoid特性,这是我第一次进入scalaz。我试图实现的是在我的类类型参数上设置一个视图绑定,以确保它只能用于可以隐式转换为Monoid的类型。因此,我的(简化)类定义是:
import scalaz._
import Scalaz._
case class Foo[T <% Monoid[T]](v: T)
new Foo(42)编译这个简单的示例会给出编译器错误:
error: No implicit view available from Int => scalaz.Monoid[Int].在此之前,此视图绑定是根据我自己的自定义特性定义的,并隐式地从T转换到该特性,而且效果很好。
既然我已经把这个变成了黄玉,我又错过了什么呢?
谢谢,克里斯
发布于 2011-09-21 18:39:13
您应该使用上下文绑定,而不是视图绑定。
import scalaz._
import Scalaz._
case class Foo[T : Monoid](v: T)
new Foo(42)T : Monoid表示法意味着作用域中存在Monoid[T]类型的隐式。事实上,它会减少以下几个方面:
case class Foo[T](v: T)(implicit ev: Monoid[T])这被称为类型类模式,您可以阅读更多关于它的这里。
https://stackoverflow.com/questions/7504428
复制相似问题