泛型 – Scala:“结构细化中的参数类型可能不是指在该细化之外
发布时间:2020-12-16 09:26:44 所属栏目:安全 来源:网络整理
导读:我有scala泛型的问题.虽然我在这里定义的第一个函数似乎完全正常,但编译器抱怨第二个定义: error: Parameter type in structural refinement may not refer to an abstract type defined outside that refinement def [B](a: C[B])(implicit m: Monad[C]):
我有scala泛型的问题.虽然我在这里定义的第一个函数似乎完全正常,但编译器抱怨第二个定义:
error: Parameter type in structural refinement may not refer to an abstract type defined outside that refinement def >>[B](a: C[B])(implicit m: Monad[C]): C[B] = { ^ 我在这做错了什么? trait Lifter[C[_]] { implicit def liftToMonad[A](c: C[A]) = new { def >>=[B](f: A => C[B])(implicit m: Monad[C]): C[B] = { m >>= (c,f) } def >>[B](a: C[B])(implicit m: Monad[C]): C[B] = { m >> a } } } 重要提示:这不是关于Monads的问题,这是一个关于scala多态性的问题. 编辑:这是我的Monad定义 trait Monad[C[_]] { def >>=[A,B](a: C[A],f: A => C[B]): C[B] def >>=[B](a: C[B]): C[B] def apply[A](a: A): C[A] } 顺便说一句:我正在使用scala 2.8RC1 问候, 解决方法
填写你的例子中的空白,我做了这个编译:
trait Monad[C[_]] { def >>=[A,B](f: A => C[B]): C[B] def >>[B](a: C[B]): C[B] } trait Lifter[C[_]] { class D { def >>=[A,B](f: A => C[B])(implicit m: Monad[C]): C[B] = { m >>= f } def >>[B](a: C[B])(implicit m: Monad[C]): C[B] = { m >> a } } implicit def liftToMonad[A](c: C[A]) = new D } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |