gpt4 book ai didi

scala - 使用带有 scalaz 的 View 边界

转载 作者:行者123 更新时间:2023-12-04 17:39:30 25 4
gpt4 key购买 nike

我通过将现有类转换为使用 Monoid 特征来首次涉足 scalaz。我想要实现的是在我的类类型参数上设置一个 View 绑定(bind),以确保它只能用于可以隐式转换为 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].

以前,此 View 绑定(bind)是针对我自己的自定义特征定义的,并通过从 T 到特征的隐式转换来定义,并且效果很好。

现在我已经将它转换为scalaz,我错过了什么?

谢谢,
克里斯

最佳答案

您应该使用上下文绑定(bind),而不是那里绑定(bind)的 View 。

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])

这被称为类型类模式,您可以阅读更多关于它的信息 here .

关于scala - 使用带有 scalaz 的 View 边界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7504428/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com