[英]How to constrain type as abstract type member in trait?
我想用抽象类型定义以下特征:
trait C {
type M[_]
def doSomething(m: M[T]): M[T] = ???
def somethingElse: M[T] = ???
}
我想限制我的高级M
具有scalaz.Monad[M]
实例。 一种解决方案是更改我的代码,例如:
abstract class C[M: Monad] { ... }
但我希望M成为抽象类型成员。 在Scala中这可能吗?
如果您需要Monad[M]
实例,只需...要求它:
trait C {
type M[_]
/*implicit if you like*/ def m: Monad[M]
...
}
不幸的是,如果仅通过val m = implicitly
实现类,则必须指定m。 唯一的解决方法是您提到的abstract class
方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.