我想用抽象类型定义以下特征:
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中是否可行?
答案 0 :(得分:1)
如果您想要Monad[M]
个实例,只需...需要它:
trait C {
type M[_]
/*implicit if you like*/ def m: Monad[M]
...
}
遗憾的是,实现类必须指定m,如果仅作为val m = implicitly
;唯一的解决方法就是你提到的abstract class
方法。