我通过将现有的类转换为使用Monoid特征来进行scalaz的第一次尝试.我想要实现的是在我的类类型参数上设置一个视图绑定,以确保它只能用于可以隐式转换为Monoid的类型.因此,我的(简化)类定义是:
import scalaz._
import Scalaz._
case class Foo[T <% Monoid[T]](v: T)
new Foo(42)
Run Code Online (Sandbox Code Playgroud)
编译这个简单的例子给出了编译器错误:
error: No implicit view available from Int => scalaz.Monoid[Int].
Run Code Online (Sandbox Code Playgroud)
以前这个视图绑定是根据我自己的自定义特征定义的,具有从T到特征的隐式转换,这很好.
我现在将这个转换为scalaz,我错过了什么?
谢谢,克里斯
您应该使用上下文绑定,而不是绑定在那里的视图.
import scalaz._
import Scalaz._
case class Foo[T : Monoid](v: T)
new Foo(42)
Run Code Online (Sandbox Code Playgroud)
该T : Monoid符号意味着有一个隐含的类型的Monoid[T]范围.事实上,它贬低了以下几点:
case class Foo[T](v: T)(implicit ev: Monoid[T])
Run Code Online (Sandbox Code Playgroud)
这被称为类型类模式,您可以在此处阅读更多相关信息.
| 归档时间: |
|
| 查看次数: |
206 次 |
| 最近记录: |